不是问题,因为我发现了导致它的原因,但仍然是一个巨大的怪癖:
显然,当您创建闭包时,JavaScript引擎不会保存其所有范围变量。 它只保存内部函数真正使用的那些。如果您暂停程序,这会导致调试器中的结果不正确。以下是如何重现这个
的方法1.在Chrome中运行以下代码段:
function foo (){
var id = 0
var id2 = 1
return function foo2(){
//console.log(id)
console.log(id2)
debugger
}
}
foo()()
请注意,在闭包范围内只定义了id2:
2.取消注释console.log语句。
封闭范围中现在有两个变量
有人知道为什么会发生这种情况(我认为这是为了节省内存),还有其他方面我们应该注意这些。