我读过很多关于JavaScript单线程执行模型、事件循环和事件队列的文章。
但有一件事尚不清楚。我创建了一个小提琴来说明我的问题:http://jsfiddle.net/yzpmf67f/ 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);
}
如果您单击“执行计算”按钮,将需要一些时间并阻塞页面。但是,如果您单击“执行其他操作”按钮,当页面仍然挂起时,它仍然会被添加到队列中并在我们的计算完成后执行。
那么,如果 JS 是单线程的,那么当我们计算其他内容时,谁将 UI 事件放入事件队列呢?
那么,如果 JS 是单线程的,那么当我们计算其他内容时,谁将 UI 事件放入事件队列呢?
显然不是 JS :-) 它是浏览器中的其他线程之一,在本例中负责管理 UI 事件(这些事件又由操作系统提供)。事实上,有很多东西与 JS 引擎并行运行,例如管理网络连接(以及对 ajax 事件进行排队)的线程。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)