js预编译

每次面试当拿到这样的题,你会轻松的都将它搞定吗?

function test1(a, b) {
    console.log(a);  
    c = 0;
    var c;
    a = 3;
    b = 2;
    console.log(b); 
    function b() {}
    function d() {}
    console.log(b); 
}
test1(1);

如果上面问题你都可以轻松搞定,那么请略过此篇文章,有疑惑的小伙伴可以跟我仔细探究一下了。

这就不得不说说js的预编译了,js代码的执行是读一行代码执行一行,但在执行之前系统会先对js进行全面扫描检查是否存在低级的语法错误,并不会立即执行语句。预编译是发生函数执行的前一刻,简单总结了四句话:1. 创建AO对象(执行期上下文); 2. 找形参和变量声明, 作为AO对象属性值, 值为 undefined;3. 将形参 和实参相统一;4. 找函数声明,值赋予函数体;以上面的例子为例:

第一步: AO {

  

}

第二步: AO {

  a: undefined;

  b: undefined;

  c:undefined;

     }

第三步:AO {

  a:1;

    b: undefined;

  c:undefined;

}   

第四步: AO {

       a:1;

    b: function b() {};

  c:undefined;

  d:functoiin d() {};

} 

当test函数执行后,a=1; b=2; 这时候我们不必再为function b() {}这样的函数声明烦恼了,因为在js预编译的时候已经执行了。预编译的四部曲是不是很简单搞定问题~~

 

转载于:https://www.cnblogs.com/linxing/p/11059865.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值