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)
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)