另一个JavaScript范围问题。我相信这与'提升'无关。启用模块模式的Javascript范围问题
我在这里已经一个很小的代码块 - http://jsfiddle.net/0oqLzsec/2/
var c = function(){
var x = 'before',
callBefore = function(){
alert(x);
},
callAfter = function(){
_callAfter();
};
return{
callBefore : callBefore,
callAfter : callAfter
}
var y = 'after';
function _callAfter(){
alert(y);
}
};
var obj = c();
obj.callBefore();
obj.callAfter();
callAfter()
总是提醒“未定义”即使变量y _callAfter()
之前定义。但如果我在变量x之前移动变量y声明,它正在工作。
我想知道如果callAfter()
可以_callAfter()
它定义如下,为什么不能读取变量y?
这是一个提升的问题。变量y声明被挂起,但不是赋值。 –
“**还有一个** JavaScript范围问题”?你的问题可能会也可能不会每次都被同一个人看到,所以这有点不合适...... –
很简单,你在声明'y'之前返回,所以它是未定义的... – dandavis