美文网首页
JavaScript中的setTimeout

JavaScript中的setTimeout

作者: KrisLeeSH | 来源:发表于2017-06-27 16:34 被阅读9次

先上代码:

setTimeout(() => console.log("r u OK?"), 0);
console.log("hahahaha");

你觉得会输出什么?

Why

JavaScript是单线程执行的,js引擎只是浏览器的一个线程而已。

在浏览器中测试一下以下代码,是不是永远不会alert?

var isEnd = true;
window.setTimeout(function () { //1s后,改变isEnd的值
    isEnd = false;
}, 1000);
while (isEnd);
alert('end');

看下浏览器内核:


浏览器内核

js的执行顺序是遵循一个叫做事件队列的机制.从图中我们可以看出,浏览器有各种各样的线程,比如事件触发器,网络请求,定时器等等.线程的联系都是基于事件的.js引擎处理到与其他线程相关的代码,就会分发给其他线程,他们处理完之后,需要js引擎计算时就是在事件队列里面添加一个任务. 这个过程中,js并不会阻塞代码等待其他线程执行完毕,而且其他线程执行完毕后添加事件任务告诉js引擎执行相关操作.这就是js的异步编程模型.

相关文章

网友评论

      本文标题:JavaScript中的setTimeout

      本文链接:https://www.haomeiwen.com/subject/fzyecxtx.html