JavaScript 执行顺序:为什么这个条件在它后面的代码之后执行?

JavaScript execution order: why does this conditional execute after the code that follows it?

if(true) {
    let m = "yo";

    console.log(m);
}

console.log(m)

输出:

ReferenceError: m is not defined
yo

因此第 4 行的代码在第 8 行的代码之后执行。

我对 let 的使用与此有什么关系吗?

编辑:阅读评论后我意识到这可能是因为我的运行时间。这是我在 Firefox nightly 中看到的:

编辑 2:如果这确实只是我的运行时,那么是否因为这样的事情对生产代码有影响?跨浏览器的行为不一致?我该如何防范?

所以我认为 FF 运行time 的行为是可以的。粗略地看一下规范(6.2.3.1 等)表明代码应该 运行 一行一行,直到第二个 console.log(m),此时抛出 ReferenceError

我怀疑它只是 "looks funny" 因为控制台选择呈现第一个 console.log 和异常消息的顺序(例如,它是 Chrome 的倒数).

控制台的渲染顺序是否是错误,我留给其他人。

以下内容似乎证实了我的分析,异常记录前显示的警报。

if(true) {
    let m = "yo";

    alert(m);
}

console.log(m)