dug*_*tov 9 javascript garbage-collection google-chrome v8
当我尝试调试此代码时(http://jsfiddle.net/QWFGN/)
var foo = (function(numb) {
    return {
        bar: function() {
            debugger;
            return "something";
        }
    }
})(1);
foo.bar()
Chrome中的开发人员工具与Firefox中的Firebug和IE中的开发人员工具的行为不同.问题是,变量numb 是不是在Chrome开发者工具可见的debugger;线.但是,它在Firebug和IE中可见.如果我尝试输入numbChrome的控制台,我会得到:
ReferenceError: numb is not defined
numb当然,在这个闭包中可以看到,如果我将代码更改为(http://jsfiddle.net/QWFGN/1/)
var foo = (function(numb) {
    return {
        bar: function() {
            debugger;
            console.log(numb);
            return "something";
        }
    }
})(1);
foo.bar()
numb现在也可以在Chrome中看到,我可以获得价值1作为回应.
所以,我的问题是:为什么只有谷歌浏览器看不到从未使用的闭包变量?Google Chrome是否拥有自己的垃圾收集实现,或者仅与Google Chrome中的调试工具实施相关.
这与垃圾收集或调试工具无关.
实际上发生的事情是Chrome的JS引擎意识到你从不numb在函数内部使用,所以它根本不包含在闭包中.  
请注意,只有当它可以证明内部函数从不使用with或调用时,它才能执行此操作eval.
| 归档时间: | 
 | 
| 查看次数: | 242 次 | 
| 最近记录: |