Adi*_*M P 6 javascript firefox let ecmascript-6 firefox-developer-tools
if(true) {
let m = "yo";
console.log(m);
}
console.log(m)
Run Code Online (Sandbox Code Playgroud)
输出:
ReferenceError: m is not defined
yo
Run Code Online (Sandbox Code Playgroud)
所以第4行的代码正在第8行的代码之后执行.
我的用法let与此有关吗?
编辑:阅读评论后,我意识到这可能是因为我的运行时.这是我每晚在Firefox中看到它的方式:
编辑2:如果这确实只是我的运行时,那么生产代码有什么影响,因为这样的事情?跨浏览器的行为不一致?我该如何防范呢?
所以我认为 FF 运行时的行为是可以的。粗略地浏览一下规范(6.2.3.1 等)表明代码应该逐行运行,直到抛出console.log(m)a 的第二个点。ReferenceError
我怀疑它只是“看起来很有趣”,因为控制台选择渲染第一个消息console.log和异常消息的顺序(例如,它与 Chrome 相反)。
控制台的渲染顺序是否被视为错误,我留给其他人。
以下内容似乎证实了我的分析,并在记录异常之前显示了警报。
if(true) {
let m = "yo";
alert(m);
}
console.log(m)
Run Code Online (Sandbox Code Playgroud)