为什么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声明。
3 回答
慕雪6442864
TA贡献1812条经验 获得超5个赞
eval
我能想到的唯一解决方案是,每当DevTools打开时,我们就会取消所有代码,并使用强制上下文分配重新编译。不过,在启用DevTools的情况下,这将显着地降低性能。
x
debugger
x
foo
function baz() { var x = "x value"; var z = "z value"; function foo () { console.log(x); } function bar() { debugger; }; bar();}baz();
神不在的星期二
TA贡献1963条经验 获得超6个赞
x
bar
x
bar
x
bar
x
bar
.
添加回答
举报
0/150
提交
取消