Chrome的垃圾收集工作方式有何不同?

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()
Run Code Online (Sandbox Code Playgroud)

Chrome中的开发人员工具与Firefox中的Firebug和IE中的开发人员工具的行为不同.问题是,变量numb 是不是在Chrome开发者工具可见debugger;线.但是,它在Firebug和IE中可见.如果我尝试输入numbChrome的控制台,我会得到:

ReferenceError: numb is not defined
Run Code Online (Sandbox Code Playgroud)

numb当然,在这个闭包中可以看到,如果我将代码更改为(http://jsfiddle.net/QWFGN/1/)

var foo = (function(numb) {
    return {
        bar: function() {
            debugger;
            console.log(numb);
            return "something";
        }
    }
})(1);
foo.bar()
Run Code Online (Sandbox Code Playgroud)

numb现在也可以在Chrome中看到,我可以获得价值1作为回应.

所以,我的问题是:为什么只有谷歌浏览器看不到从未使用的闭包变量?Google Chrome是否拥有自己的垃圾收集实现,或者仅与Google Chrome中的调试工具实施相关.

SLa*_*aks 8

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

实际上发生的事情是Chrome的JS引擎意识到你从不numb在函数内部使用,所以它根本不包含在闭包中.

请注意,只有当它可以证明内部函数从不使用with或调用时,它才能执行此操作eval.

  • 嗨,请原谅你的请求,但是你可以添加链接到一些官方消息来源吗?这会很棒! (2认同)

归档时间:

查看次数:

242 次

最近记录:

12 年,7 月 前