美文网首页
第一部分 第4章 提升

第一部分 第4章 提升

作者: 酥枫 | 来源:发表于2018-10-14 13:01 被阅读0次

    变量声明提升和函数声明提升

    var a=2;这段代码引擎在处理时会处理成

    var a;
    a=2;
    

    所以

    console.log(a);
    var a=2;
    //相当于
    /**
     * var a;
     * console.log(a);
     * a=2;
     */
    

    会输出undefined。
    同样函数也会有函数声明提升:

    foo();//undefined
    function foo(){
        console.log(a);
        var a=2;
    }
    

    单数函数表达式不会提升:

    foo();//TypeError
    bar();//ReferenceError
    var foo=function bar(){
        //...
    }
    //相当于
    /**
     * var foo;
     * foo();//此时foo为undefined
     * bar();
     * foo=function bar(){
     *     ...
     * }
     */
    

    值得注意的是,提升是单独的,即每个作用域都会进行提升操作,提升到所在作用域的最上方,而不是整个程序的最上方。

    函数优先

    函数会优先被提升,然后才是变量提升:

    foo();//1
    var foo;
    function foo(){
        console.log(1);
    }
    foo=function(){
        console.log(2);
    }
    

    上面的代码相当于:

    function foo(){
        console.log(1);
    }
    var foo;//重复声明,这一句被忽略
    foo();
    foo=function(){
        console.log(2);
    }
    

    尽管重复的var声明会被忽略,但是出现在后面的函数声明还是可以覆盖前面的:

    foo();//3
    function foo(){
        console.log(1);
    }
    var foo=function(){
        console.log(2);
    }
    function foo(){
        console.log(3);
    }
    

    相关文章

      网友评论

          本文标题:第一部分 第4章 提升

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