【问题标题】:Can't inspect scope variable when using strict mode使用严格模式时无法检查范围变量
【发布时间】:2011-12-17 13:51:19
【问题描述】:

在 Safari 中运行以下脚本时(检查器打开)

window.onload = function() { 
    "use strict";
    var x = 1;
    debugger; // debugger will auto-break on this line
}

在位于该断点处时在控制台中请求x 时出现以下错误:

Error
message: "'with' statements are not valid in strict mode"

删除"use strict"; 行让我可以在该断点上从控制台访问x

x 两次都显示在侧边栏中的Scope Variables 下方。

【问题讨论】:

  • 我认为错误一定在其他地方;在 Safari 中using this test page 不会发生在我身上(我无法设置断点,但我没有收到任何错误,并且确实得到了预期的输出)。您能否将完整复制测试用例发布到问题(最好也发布到jsbin.comjsfiddle.net)。
  • 我说不上来,但有些东西告诉我,你的代码中某处有 with 语句......当然,我完全是在这里猜测......(顺便说一句 with 语句抛出严格模式代码。)
  • 你的代码中有'with()'吗? with() 不受欢迎,许多人希望在 ECMAScript 中停止使用它
  • @MikeSav 已经做出决定。 with 语句已从严格模式中删除,我们不希望在 ES6 中使用它。
  • @T.J.Crowder 上面的 sn-p 是整个代码。我运行了你的测试用例并设置了断点,我得到了同样的错误(预期)。 console.log 输出在这两种情况下都可以正常工作,这对我来说从来都不是问题。 (它只是为了能够在检查器中设置断点。)

标签: javascript safari web-inspector


【解决方案1】:

这似乎是 Safari 的一个已知问题:https://bugs.webkit.org/show_bug.cgi?id=65829

要重现错误,您只需在断点处停止并处于严格模式时在控制台中键入任何代码。

这是错误报告中的代码:

(function(){
    "use strict";
    debugger;
})();

所以当你在断点处时,去控制台输入2+3(或任何表达式),你会得到错误。

【讨论】:

  • 它说该错误已解决,但我仍然在 Safari 8.0.7 中看到它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-20
  • 2015-07-19
  • 1970-01-01
  • 2022-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多