变量提升

81 阅读2分钟

代码示例:

var v=``'Hello World'``;``alert(v); |

输出结果为弹出“Hello World”

例子2 :

var v='Hello World';
(function(){
    alert(v);
})()

输出结果为 “Hello World”

例子3 :

var v='Hello World';
(function(){
    alert(v);
    var v='I love you';
})()

输出结果是结果是 undefined,这是变量提升造成的结果,真正代码如下

var v='Hello World';
(function(){
    var v;
    alert(v);
    v='I love you';
})()

变量提升意思为就是把下面的东西提到上面。在JS中,就是把定义在后面的东东(变量或函数)提升到前面中定义。

了解变量声明前需要了解js的作用域,先看看下面代码

 var x = 1;
    console.log(x); // 1
 if (true) {
   var x = 2;
   console.log(x); //2
}
 console.log(x);// 2

在这段代码中,Firebug显示1,2,2。这是因为JavaScript是函数级作用域(function-level scope)。这和C系语言是完全不同的。块,就像if语句,并不会创建一个新的作用域。只有函数才会创建新的作用域。再看看下面这段代码

    var x = 1;
    if (x) {
        (function () {
            var x = 2;
            // some other code
        }());
    }
    // x is still 1.
}

变量提升

变量提升,很简单,就是把变量提升提到函数的top的地方。我么需要说明的是,变量提升 只是提升变量的声明,并不会把赋值也提升上来。

我们定义三个变量

(function(){
    var a='One';
    var b='Two';
    var c='Three';
})()

其实他这样的

(function(){
    var a,b,c;
    a='One';
    b='Two';
    c='Three';
})()

这个时候就把变量提升了呀。上面案例显示undefined就是变量提升导致的结果

函数提升

再说说函数提升

函数提升是把整个函数都提到前面去。在我们写js code 的时候,我们有2中写法,一种是函数表达式,另外一种是函数声明方式。我们需要重点注意的是,只有函数声明形式才能被提升。

函数声明方式提升【成功】

function myTest(){
    foo();
    function foo(){
        alert("我来自 foo");
    }
}
myTest();

函数表达式方式提升【失败】

function myTest(){
    foo();
   var foo =function foo(){
        alert("我来自 foo");
    }
}
myTest();