js的执行机制是事件循环

什么是事件循环?

js引擎在执行代码时,首先会将同步代码加入到主线程中,异步代码会放到event table中注册回调函数,

当主线程空闲之后,event table中的回调函数就会被加入到主线程中执行。

当遇到宏任务(例如:script、setTimeout、setInterval等)又有微任务(promise、promise.nextTick)时,首先遇到异步代码其回调被加入到event table中,遇到同步代码直接执行,遇到微任务如promise中的.then会将其加入到微任务的队列中,当前这个宏任务执行完成,就会去执行微任务,微任务执行完成,也就是完成了一个tick;就会进入到执行下一个tick,又从宏任务到微任务开始执行,这样循环就是事件循环。

案例:

要知道node和浏览器的event loop有差异,这里以浏览器为准

console.log('1');

setTimeout(function() {
console.log('2');
process.nextTick(function() {
console.log('3');
})
new Promise(function(resolve) {
console.log('4');
resolve();
}).then(function() {
console.log('5')
})
})
process.nextTick(function() {
console.log('6');
})
new Promise(function(resolve) {
console.log('7');
resolve();
}).then(function() {
console.log('8')
}) setTimeout(function() {
console.log('9');
process.nextTick(function() {
console.log('10');
})
new Promise(function(resolve) {
console.log('11');
resolve();
}).then(function() {
console.log('12')
})
})

  

参考资料:

js运行机制:https://segmentfault.com/a/1190000012806637

js运行机制深入浅出:https://zhuanlan.zhihu.com/p/33125763

最新文章

  1. 利用vs2013简单初探Python
  2. EasyUI DataGrid定制默认属性名称
  3. WPF与混淆器
  4. hdu 1420(Prepared for New Acmer)(中国剩余定理)(降幂法)
  5. hdu1002
  6. CSS3基础(3)——CSS3 布局属性全接触
  7. Spring测试框架JUnit4.4 还蛮详细的
  8. Mongo DB 初识
  9. Windows下MySQL重装引起问题的解决
  10. mysql索引类型(按存储结构划分)
  11. mySQL简单操作(三)
  12. 安装rabbtimq CentOS 7
  13. IIS搭建Web服务器,外网可以访问,但无法加载视频
  14. 特别篇:Hyper-v群集模拟实战演示
  15. unity打aar包工具
  16. mvc返回多个结果集,返回多个视图
  17. CentOS禁止packagekit离线更新服务的办法
  18. C语言判断文件夹或者文件是否存在的方法【转】
  19. ZOJ 3965 Binary Tree Restoring
  20. 【WPF】TextBlock文本文字分段显示不同颜色

热门文章

  1. UGUI中Event Trigger的基本用法
  2. day01计算机组成与操作系统
  3. unet网络讲解,附代码
  4. try catch之ajax调错
  5. 实验吧—隐写术——WP之 Fair-Play
  6. D. The Fair Nut and the Best Path 树形dp (终于会了)
  7. Java基础五(方法)
  8. C#窗体模拟键盘按键(组合键)产生事件 ---- 通过keybd_event()函数
  9. ThreadLocal使用注意
  10. linux应用之gcc环境的安装