在关闭中提升变量

时间:2014-09-02 12:10:47

标签: javascript

在javascript中,变量声明在顶部悬挂。

但是

var v;
v=1;                 ----------------------------
var getValue=(function(v){
return function(){return v;};
})(v);
v=2;              -----------------------------VVV

                                  both are outside function

but results getValue();//1

为什么这次v=2没有在最高层悬挂?

1 个答案:

答案 0 :(得分:1)

您看到1而不是2的原因与提升无关,而是getValue围绕v创建的closure - 其中a值为1的本地v变量会影响全局var v; // hoisted declaration - global variable "v" v=1; // "1" is assigned to the global var getValue=(function(v) { // a function with a local "v" variable (parameter) return function(){return v;}; // access the local "v" variable })(v); // passing the value of the global variable - "1" as the time of the call v=2; // "2" is assigned to the global variable getValue(); // the local variable still has the value: 1 变量。

getValue

如果省略该参数,则var v; // hoisted declaration // v=1; // irrelevant var getValue = // (function() { can be omitted function() { return v; } // access the global variable // })() v = 2; // assign the variable getValue() // and access it from the closure: 2 将返回全局变量 - 作为调用它的时间:

{{1}}