if(true) {
let m = "yo";
console.log(m);
}
console.log(m)
输出:
ReferenceError: m is not defined
yo
因此第4行的代码正在第8行的代码之后执行。
我对let
的使用是否与此有关?
编辑:阅读评论后,我意识到这可能是因为我的运行时。以下是我每晚在Firefox中看到它的方式:
编辑2 :如果这确实只是我的运行时,那么生产代码有什么影响,因为这样的事情?跨浏览器的行为不一致?我该如何防范?
答案 0 :(得分:2)
所以我认为FF运行时的行为是可以的。粗略地看一眼规范(6.2.3.1等)表明代码应该逐行运行,直到第二个console.log(m)
,此时抛出ReferenceError
。
我怀疑它只是"看起来很有趣"因为控制台选择呈现第一个console.log
和异常消息的顺序(例如,它与Chrome相反)。
无论是否将控制台的渲染顺序视为错误,我都会留给其他人。
以下内容似乎用于在记录异常之前显示警报来确认我的分析。
if(true) {
let m = "yo";
alert(m);
}
console.log(m)