在下面的代码中:
function outer() {
var x = 'foo';
function inner() {
var y = x; // y == 'foo'
var x = 'bar'; // x == 'bar', y == undefined
}
}
为什么变量y
在 inner()
内变得未定义?它不应该指x
在outer()
?
如果行 var x = 'bar';
然后 y
被删除确实具有值“foo”。
最佳答案
inner
函数被解释为就像这样编写的:
function inner() {
var y;
var x;
y = x; // y == undefined
x = 'bar'; // x == 'bar'
}
声明被提升,但初始化是从上到下处理的。因此,在整个 inner
函数中,符号 x
和 y
都引用了该函数中本地声明的变量。功能;特别是 x
是本地 x
,而不是封闭上下文中的 x。因此,当计算 y
的初始化表达式时,x
是尚未初始化的本地 x
;它的初始值设定项表达式位于 y
的初始值设定项之后。
关于javascript - 嵌套函数丢失变量引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36894942/