JavaScript中的setTimeout

先上代码:

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的异步编程模型.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,126评论 25 709
  • 五十三:请解释 JavaScript 中 this 是如何工作的。1.方法调用模式当一个函数被保存为一个对象的属性...
    Arno_z阅读 613评论 0 2
  • 所谓迷茫,就是才华配不上梦想:大事干不了,小事不肯干;不想做手边的事,只想做天边的事。解除迷茫,就从小事做起,从身...
    不疯不成魔也阅读 131评论 0 0
  • 生活在一个无爱的环境中 是什么感受 基本就是我这样 暴躁的脾气 冷漠的表情 以前的义无反顾和奋不顾身 到现在的内心...
    敏心阅读 247评论 0 0