博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Javascript运行机制
阅读量:7207 次
发布时间:2019-06-29

本文共 1375 字,大约阅读时间需要 4 分钟。

一、Javascript运行步骤

// 基本概念1、代码块:一个

二、Javascript运行机制

JS引擎会产生两个队列:Macrotask queueMicrotask Queue

task的产生

  • macrotasks:
script, setTimeout, setInterval, setImmediate, I/O, UI rendering复制代码
  • microtasks:
process.nextTick, Promise, Object.observe, MutationObserver复制代码

JavaScript引擎运行机制:

  1. 默认从Macrotask queue中第一个任务(因为script为Macrotask)启动执行,遇到Macro或Micro task,就添加到对应的queue中;
  2. 取出所有的Microtask queue任务,并按顺序执行完所有Microtask;
  3. 再次取出下一个Macro queue并执行(同步骤1);
  4. 重复2,3
  5. 执行结束

说明: 一个task中错误,只影响当前task任务中的后续代码

如:

setTimeout(() => {  console.log('task1');  // aaa 不存在,报错  console.log(aaa);  // 这行不执行,因为被阻断  console.log(22222);}, 1000);// 上一个错误不影响此任务执行setTimeout(() => console.log('task2'), 3000);复制代码

结果:

三、完整示例:

console.log('000');Promise.resolve().then(() => {    console.log(111);    Promise.resolve().then(() => console.log(222));    setTimeout(() => console.log(333));}).then(() => {    console.log(444);});setTimeout(() => {    console.log(555);    Promise.resolve().then(() => console.log(666));});Promise.resolve().then(() => {    console.log(777);    Promise.resolve().then(() => console.log(888));});setTimeout(() => console.log(999));console.log('aaa');复制代码

结果:

000aaa111777222444888555666999333复制代码

图示分析:

  • ①执行主Macrotask,并生成新的队列。
  • ②新的队列。
  • ③执行所有Microtask,并将新的任务添加到对应的队列中,直到所有Microtask queue中的task执行完。
  • ④执行完一个Macrotask,马上去执行Microtask Queue。
  • ⑤重复以上步骤,直到结束。

转载于:https://juejin.im/post/5a5a1d9e51882573385fafc9

你可能感兴趣的文章
用Bootstrap框架弹出iframe页面 在弹出的模态框中载人iframe页面,bootstrapiframe
查看>>
2012腾讯暑期实习面经(技术类web前端)
查看>>
第3种方法获取redis cluster主从关系
查看>>
注册表管理(本地、远程)
查看>>
《Linux内核设计与实现》第四周读书笔记——第五章
查看>>
关于COM组件log的位置
查看>>
C++操作符重载
查看>>
postgresql 时间戳格式为5分钟、15分钟
查看>>
linq中如何在join中指定多个条件
查看>>
交换排序
查看>>
【转】链表归并排序插入排序
查看>>
EL表达式和JSTL的使用
查看>>
递归:python 实现2分查找
查看>>
Centos6.5 安装 RabbitMQ3.6.1
查看>>
如何设置eclipse自动提示功能
查看>>
mosfet详解
查看>>
hdu1203
查看>>
for_each用法
查看>>
“.NET技术”Ajax和WEB服务数据格式:自定义返回格式
查看>>
DropzoneJS是一个提供文件拖拽上传并且提供图片预览的开源类库.
查看>>