严格模式下无法检查作用域变量

14

在 Safari(开启 Inspector)中运行以下脚本时:

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

在侧边栏的Scope Variables下,x都显示了两次。


2
我认为错误一定是在别的地方,因为我在Safari中使用这个测试页面时没有遇到过这个问题(我无法设置断点,但我没有收到任何错误并且得到了预期的输出)。你能否将一个完整的复制测试用例发布到问题中(最好也发布到http://jsbin.com或http://jsfiddle.net)? - T.J. Crowder
1
@T.J.Crowder 上面的代码片段就是整个代码。我运行了你的测试用例,并设置了断点,我得到了相同的错误(预料之中)。console.log 的输出在两种情况下都正常工作,这对我来说从来不是问题。(它只是为了能够在检查器中设置断点。) - Timm
@RightSaidFred 那很可能是这样!幸运的是,它可以在Chrome中工作,所以人们仍然可以使用带有“严格模式”的Web检查器。 - Timm
@Timm:所以只有当你在断点时,通过直接在控制台中输入来请求 x 时才会出现错误?如果是这样的话,我认为可能会有些混淆,因为你也有 console.log(x),所以人们认为错误是从那里出现的。如果我的理解正确,我会发布一个答案。 - RightSaidFred
@RightSaidFred:是的,我应该使用debugger而不是console.log来避免混淆。刚通过错误报告发现了这一点;我会更新帖子。 - Timm
显示剩余4条评论
1个回答

24

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

要重现此错误,您只需在断点处停止且在严格模式下输入任何代码即可。

以下是来自错误报告的代码:

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

当你在断点处时,进入控制台并输入2+3(或任何表达式),你会收到错误提示。

图片描述


它说这个错误已经被解决了,但我在Safari 8.0.7中仍然看到它。 - user276648

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接