当我决定要知道更高级别的对象具有哪些属性时,我正在调试应用程序。
令我惊讶的是,铬甚至没有认识到存在的变量! 我已经设法将代码简化为:
var a = 1;
var b = 2;
(function() {
console.log(a);
debugger;
})()
编辑当上述代码仅在控制台或html中使用时,它似乎无法正常工作(即可以正常工作)文件。我在一个复杂的应用程序中观察到了这个问题(见下面的截图)并在jsfiddle中看到它,但在codepen中没有。如果有人能证实我没有疯狂(除了那个我用自己的机器向自己证明的那个同事),那就太棒了
打开控制台后,请查看the fiddle。
暂停后(由于debugger
断点关键字),请尝试检查b
。它不知道它存在。但它知道a
的确如此,因为它是在直接范围内提到的。
Firefox没有表现出相同的行为(当它不忙misbehaving in its own way我今天发现了......)
那是怎么回事?
我能想到的是v8正在优化不使用的参考文献,但为什么会这样做呢?
我认为这不会产生有价值的性能提升。为什么即使在开发工具时也能做到这一点,有没有办法阻止它呢?