相关疑难解决方法(0)

为什么Chrome调试器认为关闭的局部变量未定义?

使用此代码:

function baz() {
  var x = "foo";

  function bar() {
    debugger;
  };
  bar();
}
baz();
Run Code Online (Sandbox Code Playgroud)

我得到了这个意外的结果:

在此输入图像描述

当我更改代码时:

function baz() {
  var x = "foo";

  function bar() {
    x;
    debugger;
  };
  bar();
}
Run Code Online (Sandbox Code Playgroud)

我得到了预期的结果:

在此输入图像描述

此外,如果eval在内部函数中有任何调用,我可以按照我想要的方式访问我的变量(无论我传递给什么都没关系eval).

同时,Firefox开发工具在两种情况下都给出了预期的行为.

与Chrome有什么关系,调试器的行为不如Firefox?我已经观察了这种行为一段时间,包括版本41.0.2272.43 beta(64位).

是不是Chrome的javascript引擎可以"平坦化"这些功能呢?

有趣的是,如果我添加在内部函数中引用的第二个变量,x变量仍未定义.

我知道在使用交互式调试器时经常有范围和变量定义的怪癖,但在我看来,基于语言规范,应该是这些怪癖的"最佳"解决方案.所以我很好奇这是因为Chrome比Firefox更优化.以及在开发期间是否可以轻松禁用这些优化(也许在开放工具打开时应该禁用它们?).

此外,我可以使用断点和debugger语句重现这一点.

javascript google-chrome google-chrome-devtools

155
推荐指数
3
解决办法
3万
查看次数

如何获得已优化的变量的值?

在Javascript执行期间,某些变量可以被“优化”。因此,此类变量的值在调试时无法检查(用户文档)。如果尝试评估变量,变量视图将显示(优化)消息,并且控制台将引发以下错误:

Error: variable has been optimized out
Run Code Online (Sandbox Code Playgroud)

有什么方法可以在Firefox中强制执行此类变量的评估或禁用此优化?

javascript debugging firefox javascript-debugger

5
推荐指数
2
解决办法
8301
查看次数