美文网首页
变量提升和函数表达式

变量提升和函数表达式

作者: 落花的季节 | 来源:发表于2017-06-13 14:18 被阅读16次

    先让我们来看个题,测试以下我们的能力:

    var getName = function () { alert (1);};
    function getName() { alert (2);}
    
    getName();
    
    

    大家作出答案了吗?没做出来,不要急,下面我们就一起来分析以下。

    变量声明提升

    即所有声明变量或声明函数都会被提升到当前函数的顶部。

    例如:

    console.log(x);
    var x;
    x=0;
    

    浏览器在执行的时候,js引擎会把声明语句提到最前面,如下:

    var x;
    console.log(x);
    x=0;
    

    函数表达式

    var getNamefunction getName都是声明语句,区别在于var getName是函数表达式,而function getName是函数声明。
    函数表达式最大的问题在于,会将js会将此代码分为两行执行。

    例如:

    console.log(x);
    var x = 1;
    function x(){}
    

    实际执行的代码为,先将var x = 1拆分为var xx = 1两行,然后将var x = 1function x(){}提升至前两行。

    所以最终函数声明的x覆盖了变量声明的x,log输出为x函数。

    同理,上题的实际执行代码为:

    var getName;//只提升变量声明
    function getName(){//提升函数声明,覆盖var的声明
        alert|(2);p
    }
    getName = function(){//最终的赋值再次覆盖function getName声明
        alert(1);
    }
    
    getName()//1
    

    相关文章

      网友评论

          本文标题:变量提升和函数表达式

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