为什么开发工具无法理解闭包?

时间:2015-05-12 17:29:50

标签: javascript google-chrome-devtools

有人可以解释一下为什么Chrome的开发工具(也许是其他浏览器 - 我没有打扰过检查)不会看到链中的变量?

所以,如果我有这样的事情:

function wholeKit(kaboodle) {
    kaboodle.forEach((k)=> {
      k.parts.map((p)=> {
         // console.log(kaboodle, k)    
        debugger;   
      })   
    })  
}

在断点处,Chrome会看到p的值,但不会看到kaboodlek。他们将是undefined。但是,如果我取消断开断点上方的行 - 神奇地说这些变量将不再是未定义的。怎么样?

jsbin for those who can't mentally digest ES6

upd:显然这就是浏览器的垃圾收集器如何工作,那些未被使用的变量被刮掉了。现在我很好奇是否有办法调整GC,因为当DevTools打开时?

1 个答案:

答案 0 :(得分:3)

您的代码存在语法错误。 forEach和map缺少右括号,Chrome不支持lambdas的ES6箭头语法。

当我将回调更改为常规函数并添加了缺少的括号时,一切正常。

function wholeKit(kaboodle) {
    kaboodle.forEach(function(k){
        k.parts.map(function(p){
            console.log(kaboodle, k)    
            debugger;   
        });
    });
}