美文网首页
有关Js作用域声明提升

有关Js作用域声明提升

作者: KittyKnight | 来源:发表于2017-04-30 20:23 被阅读14次

    js抛不开的话题就是这个变量提升了,看了YDKJS关于这个的章节,总结几点。

    1.声明提升,赋值不提升,这其实表象来看的结果,其实质如下

    alert(foo);

    var foo = 1;

    比如这两行,结果是undefined,并不是1,就是因为编译器把var foo = 1拆成了两句话,一句var foo,一句foo = 1;

    结果变成了

    var foo;

    alert(foo);

    foo = 1;

    2.函数提升 > 变量提升

    alert(foo());

    function foo(){

        return 1;

    }

    var foo = function(){

       return 1;

    }

    按照第一条的理论,还有惯性思维的判断,后声明后后提升,这个看起来应该是undefined,结果其实是1.

    3.后声明,后提升

    alert(foo());

    if(true){

        function foo(){ return 1;}

    } else {

        function foo(){return 2;}

    }

    这个大家都觉得应该是1吧,其实不是,我们能得出这个结论,是因为我们在看代码是使用的执行视角,但是代码在运行之前要用编译器的视角来完成运行路线,所以在上面那段代码中,编译器会看到两段声明,第二段,覆盖了第一段。

    这就是神奇的js语言。

    相关文章

      网友评论

          本文标题:有关Js作用域声明提升

          本文链接:https://www.haomeiwen.com/subject/cpmxtxtx.html