代码:
function test4() {
var x = 10;
var y = 100;
// inner referred x only
function inner () {
console.log(x);
debugger;
}
// inner2 referred y to make sure y is in the scope of inner
function inner2 () {
console.log(y);
}
return inner;
}
var foo = test4();
foo();
y
在作用域inner
中,即使只有从未使用过的inner2
也引用它。我在作用域中检查了结果,x
、y
都在那里。
但是,当我在监视面板和控制台中检查变量时,无法获取其中的所有变量:
很奇怪,当使用调试器时,y
在作用域中但未定义。这是否意味着调试器不能访问当前上下文中未使用的变量,即使它在闭包中,还是只是一个错误?(我的Chrome版本为51.0.2704.103 m)这类似于为什么Chrome调试器认为已关闭的局部变量未定义?,但不完全相同。因为我代码中的
inner2
确保y
在闭包中。实际上,我的问题与该问题下Louis's answer的答案相反。
inner
闭包没有引用y
,因此它被优化掉了,调试器无法访问它。inner2
可以访问,但你不在inner2
中。 - Alexander O'Maray
没有被引用,因此它被优化掉了。没有任何需要它存在的东西(也无法通过调试器访问它)。 - zerkms