为什么Chrome调试器认为封闭局部变量是未定义的?
使用此代码:
function baz() {
var x = "foo";
function bar() {
debugger;
};
bar();}baz();
我得到了一个意想不到的结果:
当我更改代码时:
function baz() {
var x = "foo";
function bar() {
x;
debugger;
};
bar();}
我得到了预期的结果:
另外,如果有人打电话到eval
在内部函数中,我可以像我想做的那样访问我的变量(不管我传递给什么)eval
).
同时,Firefoxdev工具在这两种情况下都提供了预期的行为。
Chrome的什么地方,调试器的行为不如Firefox那么方便?我观察这种行为已经有一段时间了,包括41.0.2272.43测试版(64位)。
是Chrome的javascript引擎在可能的情况下“平复”了这些功能吗?
有趣的是,如果我添加第二个变量,是在内部函数中引用,x
变量仍未定义。
我理解在使用交互式调试器时经常会出现范围和变量定义的怪癖,但在我看来,基于语言规范,应该有一个解决这些怪癖的“最佳”解决方案。所以我很好奇这是否是因为Chrome比Firefox更加优化。此外,这些优化在开发过程中是否可以很容易地被禁用(也许在开发工具打开时应该禁用这些优化?)。
此外,我还可以使用断点以及debugger
声明。