代码之家  ›  专栏  ›  技术社区  ›  dugokontov

Chrome的javascript垃圾收集工作方式不同吗?[副本]

  •  9
  • dugokontov  · 技术社区  · 11 年前

    当我尝试调试此代码时( 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中是可见的。如果我尝试键入 麻木的 在Chrome的控制台中,我得到:

    ReferenceError: numb is not defined
    

    麻木的 当然,在这个闭包中是可见的,如果我将代码更改为( http://jsfiddle.net/QWFGN/1/ )

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

    麻木的 现在在Chrome中也可以看到,我可以获得价值 1 作为回应。

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

    1 回复  |  直到 11 年前
        1
  •  8
  •   SLaks    11 年前

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

    事实上,Chrome的JS引擎意识到你永远不会使用 numb 在函数内部,所以它根本不包括在闭包中。

    请注意,只有当它能够证明内部函数从未使用 with 或呼叫 eval .