Javascript 为什么开发工具没有';我不懂闭包?
有人能解释一下为什么Chrome的开发工具(可能还有其他浏览器——我没有费心检查)看不到链上的变量吗 所以如果我有这样的东西:Javascript 为什么开发工具没有';我不懂闭包?,javascript,google-chrome-devtools,Javascript,Google Chrome Devtools,有人能解释一下为什么Chrome的开发工具(可能还有其他浏览器——我没有费心检查)看不到链上的变量吗 所以如果我有这样的东西: function wholeKit(kaboodle) { kaboodle.forEach((k)=> { k.parts.map((p)=> { // console.log(kaboodle, k) debugger; }) }) } 在断点处,Chro
function wholeKit(kaboodle) {
kaboodle.forEach((k)=> {
k.parts.map((p)=> {
// console.log(kaboodle, k)
debugger;
})
})
}
在断点处,Chrome将看到p
的值,但不会看到kaboodle
和k
。它们将是未定义的。但是,如果我取消对断点上方的行的注释,神奇的是,这些变量将不再是未定义的。怎么会这样
upd:显然,浏览器的垃圾收集器就是这样工作的,那些没有被使用的变量会被刮去。现在我很好奇是否有办法调整GC,因为DevTools何时打开?您的代码有语法错误。forEach和map缺少右括号,Chrome不支持lambdas的ES6 arrow语法 当我将回调更改为常规函数并添加缺少的括号时,一切都正常工作
function wholeKit(kaboodle) {
kaboodle.forEach(function(k){
k.parts.map(function(p){
console.log(kaboodle, k)
debugger;
});
});
}
在盲目发布答案之前,你至少应该阅读问题<代码>函数wholeKit(kaboodle){kaboodle.forEach(函数(k){k.parts.map(函数(p){debugger;};});}wholeKit([{parts:['a','b','c']}])运行这个程序,你会看到k和kaboodle是未定义的,在盲目地评论答案之前,你至少应该阅读它。如果你修复了该用户提到的关闭问题,你会看到
k
和kaboodle
不再是未定义的。你明白为什么console.log在我的帖子中被注释掉了吗?我没有盲目回答,我实际上已经测试过了。但现在你又举了一个例子,我成功地复制了它。是的,这很奇怪。一个对我有效的解决方法是在“调试器”旁边添加一个eval(“”
语句,以禁用JS引擎可能正在进行的任何更奇特的优化听起来像是在优化未使用的变量,与垃圾收集器无关。垃圾收集器不会导致“undefined reference”错误,而且我知道它实际上不是很聪明,而且在Javascript中很容易出现内存泄漏。不管怎样,我认为你应该检查这是否已经在Chrome中作为一个bug提交。如果在控制台中使用kaboodle,则它不在范围内,但如果查看“调用堆栈”窗格,仍然可以找到它。