Tom*_*ian 6 javascript dom-events
我仍然相信 Javascript 是单线程的,但是当我想到事件处理机制时,我有些怀疑。
为什么我认为即使在处理队列中的一个事件时,它也可以侦听或将事件推送到同一队列。我创建了一个示例,如下所示:
<html>
<head>
<script>
function clicked(){
alert("clicked in between..");
}
function longRun(){
for(var i=0;i<50000;i++){
console.log(i);
}
alert("completed .... ");
}
</script>
</head>
<body>
<input type="button" value="quick!" onclick="clicked();"/>
<input type="button" value="long run!" onclick="longRun();"/>
</body>
</html>Run Code Online (Sandbox Code Playgroud)
当我点击长期运行!这需要一些时间才能完成,但与此同时,如果我点击快速!它将被添加到事件队列中,并在长期运行事件后立即执行。
实际发生了什么?谁能解释/纠正我
除了 webWorkers(我们不在此讨论),浏览器中的每个窗口只有一个“用户线程”。这意味着只有一个线程在运行您的用户 Javascript。
这并不意味着幕后浏览器引擎没有其他一些线程来处理非 Javascript 处理。事实上,这种情况的可能性很大。但是,由于这些其他可能的线程从未实际运行任何 Javascript 或影响任何 Javascript 变量,因此它们不会直接影响 JS 执行环境。
是的,这些其他线程可能确实将内容插入到 JS 事件队列中,稍后当主 JS 线程准备好处理下一个事件时,这些内容将被拾取。
请参阅此答案JavaScript 如何在后台处理 AJAX 响应?了解更多信息和相关文章列表。
| 归档时间: |
|
| 查看次数: |
2563 次 |
| 最近记录: |