匿名函数预剖析思索

关于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

    原文作者:sdbxpjzq
    原文地址: https://segmentfault.com/a/1190000004367628
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞