在求职面试中,我很难听到"javascript可以无序地评估陈述".这到底是什么程度的?我可以想象一百种方法来明确地无序地评估语句 - 例如在分时操作系统中.但他似乎在说,如果我评估
console.log('a')
console.log('b')
Run Code Online (Sandbox Code Playgroud)
Javascript规范以某种方式不要求输出a首先b.我可以想象,如果语句在功能上是纯粹的,即没有副作用,但副作用必须始终按顺序发生,那么评估者可能会尝试评估第二个语句,如果第一个语句的IO是阻塞的,是否正确?当然,IO是一个很大的副作用.
规范兼容的Javascript在多大程度上可以无序评估?或者这是一个误传的情况?
JavaScript是单线程的(除了Web工作者).期.ECMA-262语言规范版5.1没有说明无序执行.在您的简单示例中,这两个语句保证以相同的顺序执行.
此外,单个JavaScript代码块永远不会被任何其他代码块中断,例如事件处理程序.这就是长时间运行的代码块导致UI 冻结的原因:
for(var i = 0; i < 1000000000; ++i) {
console.log(i);
}
Run Code Online (Sandbox Code Playgroud)
保证上面的代码块永远不会被中断或重新排序.只要循环正在运行,所有事件处理程序和超时都等待单个线程.当然,数字将以正确的顺序出现.
可能无序执行的是异步超时:
setTimeout(function() {
console.log('a');
}, 1);
setTimeout(function() {
console.log('b');
}, 1);
Run Code Online (Sandbox Code Playgroud)
在这里,您可能希望a首先打印,但JS引擎可能会重新排序这些事件.毕竟,您安排这些调用几乎在同一时间点执行.
| 归档时间: |
|
| 查看次数: |
294 次 |
| 最近记录: |