js单线程的本质 Event Loop解析

 更新时间:2019年10月29日 10:57:42   作者:Diamond_xx  
这篇文章主要介绍了js单线程的本质 Event Loop解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

怎么判断是浏览器还是node环境?

node中window是未定义;setImmediate是定义的,在浏览器中未定义

timer阶段:这个阶段会执行setTimeout和setInterval

check阶段:执行setImmediate

macro task [task] 宏任务 :script(页面代码)、setTimeout、setInterval、I/O事件、UI交互事件(点击事件)

micro task [job]  微任务: Promise、process.nextTick、Promise().then()

宏任务可以有多个队列

微任务只有一个队列

setTimeout任务之间,推迟执行的毫秒数越小,排在队列里面越靠前

在node里面,timers(setTimeout、setInterval)会优先于setImmediate

setTimeout(() => {
  console.log('setTimeout')
},0);  // 大于1000时,会先执行setImmediate
setImmediate(()=> { console.log('setImmediate')})
console.log('start');
setTimeout(function (){
  console.log('timeout');
},10);
new Promise((resolve) => {
  console.log('promise');
  resolve()
  setTimeout(() => {
    console.log('Promsie中的setTimeout');
  },0);
}).then(() => {
  console.log('then');
});
console.log('end');

运行机制

1. 在执行栈中执行一个宏任务。

2. 执行过程中遇到微任务,将微任务添加到微任务队列中。

3. 当前宏任务执行完毕,立即执行微任务队列中的任务。

4. 当前微任务队列中的任务执行完毕,检查渲染,GUI线程接管渲染。

5. 渲染完毕后,js线程接管,开启下一次事件循环,执行下一次宏任务(事件队列中取)。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 浅谈关于JavaScript的语言特性分析

    浅谈关于JavaScript的语言特性分析

    本篇文章小编为大家介绍,浅谈关于JavaScript的语言特性分析,有需要的朋友可以参考一下
    2013-04-04
  • p5.js临摹旋转爱心

    p5.js临摹旋转爱心

    这篇文章主要为大家详细介绍了p5.js临摹旋转爱心,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • gulp教程_从入门到项目中快速上手使用方法

    gulp教程_从入门到项目中快速上手使用方法

    下面小编就为大家带来一篇gulp教程_从入门到项目中快速上手使用方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • js和jquery中获取非行间样式

    js和jquery中获取非行间样式

    本篇文章主要介绍了js和jquery中获取非行间样式的相关知识,具有很好的参考价值。下面跟着小编一起来看下吧
    2017-05-05
  • ajax java 实现自动完成功能

    ajax java 实现自动完成功能

    都知道百度建议是用ajax做的,想要做的快速稳定,可复制可移植就不容易了,花时间研究还不如自己来写。根据一个pdf文档提供的资料,用了小半天时间,终于实现了。在此与大家分享
    2012-12-12
  • Swiper.js插件超简单实现轮播图

    Swiper.js插件超简单实现轮播图

    这篇文章主要介绍了Swiper.js插件超简单实现轮播图,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 关于layui的动态图标不显示的解决方法

    关于layui的动态图标不显示的解决方法

    今天小编就为大家分享一篇关于layui的动态图标不显示的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • js正则表达式惰性匹配和贪婪匹配用法分析

    js正则表达式惰性匹配和贪婪匹配用法分析

    这篇文章主要介绍了js正则表达式惰性匹配和贪婪匹配用法,结合实例形式详细分析了正则表达式的基本概念以及惰性匹配和贪婪匹配的使用方法,需要的朋友可以参考下
    2016-12-12
  • web开发js字符串拼接占位符及conlose对象Api详解

    web开发js字符串拼接占位符及conlose对象Api详解

    本篇文章主要为大家介绍了web开发中字符串的拼接,占位符的使用以及conlose对象Api的使用,有需要的朋友可以借鉴参考下,希望可以有所帮助
    2021-09-09
  • javascript的alert box在java中如何显示多行

    javascript的alert box在java中如何显示多行

    这篇文章主要介绍了javascript的alert box在java中如何显示多行,需要的朋友可以参考下
    2014-05-05

最新评论