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常用小技巧小结,需要的朋友可以参考下
    2014-12-12
  • JS中队列和双端队列实现及应用详解

    JS中队列和双端队列实现及应用详解

    这篇文章主要介绍了JS中队列和双端队列实现及应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • JavaScript 获取事件对象的注意点

    JavaScript 获取事件对象的注意点

    平时我们获取事件对象一定要将firefox考虑进去。
    2009-07-07
  • 支付宝小程序自定义弹窗dialog插件的实现代码

    支付宝小程序自定义弹窗dialog插件的实现代码

    支付宝小程序官方提供的alert提示框、dialog对话框、model弹窗功能比较有限,有些都不能随意自定义修改的。这篇文章主要介绍了支付宝小程序自定义弹窗dialog插件的实现代码,需要的朋友可以参考下
    2018-11-11
  • 浅析Promise的介绍及基本用法

    浅析Promise的介绍及基本用法

    Promise是异步编程的一种解决方案,在ES6中Promise被列为了正式规范,统一了用法,原生提供了Promise对象。接下来通过本文给大家介绍Promise的介绍及基本用法,感兴趣的朋友一起看看吧
    2021-10-10
  • javascript中onclick(this)用法介绍

    javascript中onclick(this)用法介绍

    this指触发事件的对象,接下来为大家分享下javascript中onclick(this)的用法,感兴趣的朋友可以参考下哈,希望对你有所帮助
    2013-04-04
  • Javascript实现的CSS代码高亮显示

    Javascript实现的CSS代码高亮显示

    到网上一位别出心裁的高手使用字符串而不是正则表达式实现了Javascript代码高亮显示,自己受益匪浅,于是就构思了CSS代码的高亮显示。
    2009-11-11
  • 微信小程序 wepy框架与iview-weapp的用法详解

    微信小程序 wepy框架与iview-weapp的用法详解

    这篇文章主要介绍了微信小程序 wepy框架与iview-weapp的用法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-04-04
  • Javascript实现基本运算器

    Javascript实现基本运算器

    这篇文章主要为大家详细介绍了Javascript实现基本运算器的相关代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • JavaScript设计模式之观察者模式(发布订阅模式)原理与实现方法示例

    JavaScript设计模式之观察者模式(发布订阅模式)原理与实现方法示例

    这篇文章主要介绍了JavaScript设计模式之观察者模式(发布订阅模式)原理与实现方法,结合实例形式分析了JavaScript观察者模式概念、原理、使用方法及相关操作注意事项,需要的朋友可以参考下
    2018-07-07

最新评论