了解执行模型和事件循环

时间:2015-03-16 16:34:01

标签: javascript event-loop

我读过很多关于JavaScript单线程执行模型,事件循环和事件队列的文章。

但有一件事并不清楚。我创造了一个小提琴来说明我的问题:http://jsfiddle.net/yzpmf67f/

<button onClick="window.compute()">Do computation</button>
<button onClick="alert('doing')">Do something else</button>

window.compute = function compute() {
var result = 0;
for (var i = 0; i < 100000; i++) {
    for (var j = 0; j < 100000; j++) {
        result = i + j;
    }
};
var textnode = document.createTextNode(result);
document.body.appendChild(textnode);

}

如果单击“执行计算”按钮,则需要一些时间并阻止该页面。但是如果你点击“Do something else”按钮,当页面仍然挂起时,它仍会被添加到队列中并在我们的计算结束后执行。

因此,如果JS是单线程的,那么当我们计算其他东西时,他们会将UI事件放入事件队列中吗?

1 个答案:

答案 0 :(得分:4)

  

因此,如果JS是单线程的,那么当我们计算其他东西时,他们会将UI事件放入事件队列中吗?

显然不是JS :-)它是浏览器中的其他线程之一,负责管理UI事件(在这种情况下由操作系统提供)。实际上,有很多东西与JS引擎并行运行,例如管理网络连接的线程(以及排队ajax事件)。