浏览器中的异步事件轮询机制

JavaScript 是一门单线程语言,之所以说是单线程,是因为在浏览器中,如果是多线程,并且两个线程同时操作了同一个 Dom 元素,那最后的结果会出现问题。所以,JavaScript 是单线程的,但是如果完全由上至下的一行一行执行代码,假如一个代码块执行了很长的时间,后面必须要等待当前执行完毕,这样的效率是非常低的,所以有了异步的概念,确切的说,JavaScript 的主线程是单线程的,但是也有其他的线程去帮我们实现异步操作,比如定时器线程、事件线程、Ajax 线程。

1.所有的同步任务都在主线程上执行,形成一个执行栈
2.主线程之外,还存在一个`任务队。只要异步任务有了运行结果,就在`任务队列`之中放置一个事件。
3.一旦执行栈中的所有同步任务执行完毕,系统就会读取`任务队列`看看里面有些什么事件,那些对应的异步任务就结束等待状态,进入执行栈,开始执行
4.主线程不断重复上面的第三步,只要主线程空了,就会读取`任务队列`这就是javascript的运行机制,这个过程会不断重复。(该过程又称为事件轮询)
5.在js中的 ES6的任务队列比循环中的任务队列优先级要高,promise则属于ES6的任务队列,所以根据其优先级,系统执行完同步任务之后,最先进入执行栈的是promise,其次才是循环中的任务事件
posted @ 2019-04-19 21:26  javascript狂热者  阅读(799)  评论(0编辑  收藏  举报