Chrome调试器:未在JavaScript Closure中加载的未使用的变量

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: 只有id2在闭包范围内定义

2.取消注释console.log语句.

闭包范围现在有两个变量 闭包范围中有两个变量

有人知道为什么会发生这种情况(我认为这是为了节省内存),还有其他任何方面我们都应该注意.