Chrome';javascript垃圾收集的工作方式不同吗?

Chrome';javascript垃圾收集的工作方式不同吗?,javascript,google-chrome,garbage-collection,v8,Javascript,Google Chrome,Garbage Collection,V8,当我尝试调试此代码时() Chrome中的开发者工具与Firefox中的Firebug和IE中的开发者工具行为不同。问题是变量numb在调试器上的Chrome开发者工具中不可见行。但是,它在Firebug和IE中可见。如果我尝试在Chrome的控制台中键入numb,我会得到: ReferenceError: numb is not defined numb,当然,在这个闭包中是可见的,如果我将代码更改为() numb现在也可以在Chrome中看到,我可以得到值1作为响应 因此,我的问题是:为什

当我尝试调试此代码时()

Chrome中的开发者工具与Firefox中的Firebug和IE中的开发者工具行为不同。问题是变量
numb
调试器上的Chrome开发者工具中不可见行。但是,它在Firebug和IE中可见。如果我尝试在Chrome的控制台中键入
numb
,我会得到:

ReferenceError: numb is not defined
numb
,当然,在这个闭包中是可见的,如果我将代码更改为()

numb
现在也可以在Chrome中看到,我可以得到值
1
作为响应


因此,我的问题是:为什么只有Google Chrome看不到从未使用过的闭包变量?Google Chrome有自己的垃圾收集实现,还是只与Google Chrome中调试工具的实现有关。

这与垃圾收集或调试工具无关

实际上,Chrome的JS引擎意识到在函数中从来没有使用过
numb
,因此它根本不在闭包中包含它


请注意,只有当它能够证明内部函数从不使用
with
或调用
eval

时,它才能这样做。您好,请原谅,但您是否可以添加一个有关此问题的官方来源的链接?那太好了!显然@SLaks是对的,很难在V8文档中指出这一点。类似的讨论得出相同的结论->答案为Thx。以下是我找到的一些参考资料:。如果有人在指定的地方找到指向V8文档的链接,我将不胜感激。@dugokontov没有这方面的文档,因为这是一个实现细节。您可以阅读作用域分配代码以了解实际情况:@VyacheslavEgorov thx!或的可能副本
ReferenceError: numb is not defined
var foo = (function(numb) {
    return {
        bar: function() {
            debugger;
            console.log(numb);
            return "something";
        }
    }
})(1);
foo.bar()