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