前端笔记

事件循环

2018-05-13  本文已影响4人  好奇男孩

单线程

异步任务

注意:那么问题来了,这些异步任务完成后,主线程怎么知道呢?

答案就是回调函数。
例如

setTimeout(function(){console.log(1);},50);

浏览器异步执行计时操作,当50ms到了后,会触发定时事件,这个时候,就会把回调函数放到任务队列里。整个程序就是通过这样的一个个事件驱动起来的。
所以说,js是一直是单线程的,浏览器才是实现异步的那个家伙。

事件循环

JS的运行机制如下:
(1)所有同步任务都在主线程上执行,形成一个执行栈。
(2)主线程之外,还存在一个”任务队列”。只要异步任务有了运行结果,就在”任务队列”之中放置一个事件。
(3)一旦”执行栈”中的所有同步任务执行完毕,系统就会读取”任务队列”,看看里面有哪些事件。那些对应的异步任务,于是结束等待状态,进入执行栈,开始执行。
(4)主线程不断重复上面的第三步。
所以执行栈中的代码(同步任务),总是在读取”任务队列”(异步任务)之前执行。
EventLoop
主线程从”任务队列”中读取事件,这个过程是循环不断的,所以整个的这种运行机制又称为Event Loop(事件循环)。


6.jpg
上一篇下一篇

猜你喜欢

热点阅读