匿名函数预解析思考

关于Js中的预解析相信对js有所了解的程序猿都知道,举个例子:

alert(a);
var a = 10;

上面的这个例子会弹出 undefined ,解析过程:var a; alert(a);a = 10;

javascript中的函数绝对是一道美丽的风景,那么有匿名函数存在时,是怎么解析的呢?下面看几个例子,从中一窥究竟.

  • 实例1

  alert(f);  // function f(){alert(2);}
  function f(){
    alert(1);
}
alert(f); // function f(){alert(2);}
f();  // 2
function f(){
    alert(2);
}
f();  // 2

对于使用function语句声明的函数,js解释器就会在预编译期间把函数处理,这个处理就是建立函数索引.

所以预解析期间对函数f建立索引,程序从上往下执行,函数f指向function f(){alert(1);},继续往下,还有一个函数f,此时将第一建立的索引覆盖掉,此时函数f指向的是function f(){alert(2);}.到这里预解析阶段结束,然后进行执行,第一次alert 显然弹出function f(){alert(2);},第二次同样也是,f()执行弹出2,第二次f()也同样弹出2.

  • 实例2

        alert(f);//  function(){alert(2);}
        var f = function(){
            alert(1);
        }
        alert(f);// 1
        f(); //1
        function f(){
            alert(2);
        }
        f();// 1
        alert(f); // function(){alert(1)}

实例2实例1 相比,将第一个函数f写成了匿名函数,预编译阶段,对匿名函数不做任何处理,直到执行期才按表达式逐行进行解释,所有返回的结果就不一样了.预解析期间得到的函数是function f(){alert(2);},但是执行到匿名函数,将函数f重新赋值了,改变了函数f.

  • 实例3

        alert(f);//   undefined
        var f = function(){
            alert(1);
        }
        f(); //  1
        var f = function(){
            alert(2);
        }
        f();//  2

两个都是匿名函数,在预解析期间都没有执行,所以第一次是undefined,之后进行赋值运算,依次显示12

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值