变量提升与函数提升

注:变量提升,更通俗的说法是将“识别符”提升到它所作用域的最前面。

比如:函数里面申明一个变量,var i=10;这个i就是标识符,浏览器在识别代码时,自动将函数内的变量提到最前面,但只是将var i 提到了作用域的最前面,并没有进行赋值。下面举两个例子说明下变量提升。


1.全局变量的提升

例:

     console.log(a); //undefined

     var a=10;  //var a 默认进行提升到第一行

实际运行代码:

      var a;

     console.log(a);

     a = 10;


2.局部变量的提升

例:

    function fn()

{

    console.log(a)

    var a=10;

}

实际代码:实际函数内部是将声明变量提到前面。

function fn{

    var a;

    console.log(a);

    a=10;

}


函数提升

    在js中函数有两种声明方法,是函数声明式、函数字变量式。

    函数声明式:function fn(){}

    函数字变量式:var fn = function (){}

    在js中只有函数声明式才可以进行函数提升,函数字变量式不可以进行函数提升

    why:

            函数字变量式:

                                    console.log(fn())

                                    var fn = function(){document.write("#");}

            实际代码:在浏览器加载页面代码时,浏览器会将函数的标识符提到作用域的最前面。

                                    var fn;

                                    console.log(fn());    //undefined

                                    fn = function(){document.write("#");}

函数声明式可以直接提升,跟变量提升一样,当使用浏览器时,浏览器会自动将函数提到作用域最前,function fn(){}可提升又可赋值。换言之:函数整体就会提到其作用域的最前端。

你可能感兴趣的:(变量提升与函数提升)