在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
没有在最高层悬挂?
答案 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}}