学习笔记之 javaScript的预解释

作用域

html在执行的时候,首先会提供一个供全局JS代码执行的环境

预解释

在当前的作用域中,JS代码执行之前,浏览器会默认的吧 var 和function 进行提前的声明或定义

  • 理解声明和定义
    声明(declare):var num; ->告诉浏览器在全局作用域有一个num的变量,如果变量只声明未定义,变量值为undefined
    定义(defined): num=12; -> 给变量进行赋值

  • var和function的预解释
    var: ->预解释的时候只是提前声明
    function: -> 声明和定义

  • 预解释只发生在当前的作用域下:例如:开始只对window进行预解释,函数只有在执行的时候才进行预解释

函数执行过程

1、形成一个新的作用域(栈内存)
2、如果有形参,先给形参赋值
3、进行私有作用域中的预解释
4、代码从上到下执行

预解释是毫无节操的一种机制

  • 1、预解释不管判断条件是否成立,都会把所有var提前声明
    // window预解释: var num; => window.num;
    if(!('num' in window)){
        var num = 12;
    }
    console.log(num) // =>undefined
  • 2、预解释相当于只运行等号左边的代码
//函数以声明的方式定义
fn(); // fn is not a function
var fn = function() {
    console.log('ok');
}

  • 3、自执行函数定义的function 不在全局进行预解释
// 自执行函数:定义和执行一起完成了
(function (num) {console.log(100)})(100)
  • 4、函数体中,return下边的代码同样会进行预解释; return后面的代码,不进行预解释
function fn() {
    console.log(num);
    return function(){};
    var num = 100;
}

  • 5、预解释时,如果名字已经声明过了,不需要重新声明,但是需要重新赋值

js中 变量名和函数名字一样,也算冲突

//预解释:
/* var fn; => window.fn; 
 * fn = xxxfff000
 * window.fn =  xxxfff000;
 */
function fn(){
    console.log('ok');
}

练习:

fn(); // 2
function fn() {console.log(1)};
fn(); // 2
var fn = 10; // fn =10
fn(); // fn is not a function
function fn() {console.log(2)};
fn()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值