【发布时间】:2014-06-16 12:06:37
【问题描述】:
(function(){
var x = 23;
return function(){
var x = x;
return x;
}
}())();
为什么它返回 undefined 而不是 23?
不应该是 var x = x;部分是否足够明确,因为右侧隐含地引用外部范围内的 x?
【问题讨论】:
-
我认为这可能与变量的提升有关:变量是声明然后赋值的,所以右侧
x与左侧相同 -
不,因为您返回的函数直到
x的初始声明范围消失后才会执行。因此,当您执行它时它是未定义的。您应该将x传递给您的return function -
你不需要
var x = x;。 -
@RGraham 我认为这不是原因,因为
(function(){ var y = 23; return function(){ var x = y; return x; }}())();有效 -
@Pablo,RobG 谢谢,现在就搞定。
标签: javascript scope