我的网站开发技术经验总结 我的网站开发技术经验总结
首页

fangdown

我的网站开发技术经验总结
首页
  • 大前端

  • 基础

    • js

      • 你知道new操作符是如何实现的吗
      • 说说大文件上传的思路
      • 说说对闭包的理解及应用
      • 说说对单点登录sso的理解
      • 说说对防抖节流的理解
      • 说说对函数式编程的理解
      • 说说对内存泄漏的理解及触发场景
      • 说说对事件模型的理解
      • 说说对事件委托的理解及应用场景
      • 说说对原型及原型链的理解
      • 说说对正则表达式的理解
      • 说说对BOM的理解及常见操作
      • 说说对Dom的理解及常见操作
      • 说说对JavaScript中事件循环的理解
        • 是什么
        • 怎么用
          • 事件循环
          • 运行流程
        • 宏微任务
          • 顺序
        • FAQ
      • 说说对js的执行上下文的理解
      • 说说对js中变量作用域的理解
      • 说说对js中继承的理解及实现方式
      • 说说对this关键字的理解
      • 说说你对 Immutable Data的理解?如何应用在React项目中
      • 说说如何判断数据类型
      • 说说如何判断一个元素在可视区域内
      • 说说如何实现函数缓存
      • 说说深浅拷贝的区别及实现
      • 说说什么是尾递归及其应用
      • 说说为什么0.1+0.2!==0.3
      • 说说下拉刷新,上拉加载的原理
      • 说说ajax的实现原理
      • 说说call-apply-bind的作用及区别
      • 说说js中本地存储有哪些方式及区别
      • 说说js中的类型转换机制
      • Javscript数组的常用方法有哪些?
      • Javscript字符串的常用方法有哪些?
    • css

    • ES6

  • 框架

  • 情商

  • 算法

  • 网络

  • 千锤百炼
  • 基础
  • js
fangdown
2021-09-01
目录

说说对JavaScript中事件循环的理解

# 是什么

  • 背景:js是一门浏览器语言,因交互问题, 所以采用单进程单线程技术 ,同一时间只能做一个事情
  • 定义:为解决单线程运行阻塞问题,js使用了计算机系统的一种运行机制,这种机制称为事件循环

# 怎么用

在js中所有的任务都可以分为:

  • 同步任务:立即执行的代码, 直接进入主线程执行
  • 异步任务:如异步请求,settimeout等放入异步队列中

# 事件循环

同步任务进入主线程,异步任务进入异步队列,主线程内的任务执行完毕, 会去异步队列读取对应的任务,推入主线程执行。上述的过程不断重复就是事件循环

# 运行流程

# 宏微任务

  • 宏任务:
    • script
    • setTimeout,setInterval
    • UI事件
    • setImmediate、I/O
    • postMessage
  • 微任务
    • promise.then
    • process.nextTick
    • MutaionObserver

# 顺序

同一个上下文中, 先微任务,后宏任务

  • 执行一个宏任务,遇到微任务,就把微任务放到微任务事件队列
  • 当前宏任务完成后, 查看微任务队列,将里面的任务依次执行完

# FAQ

async function async1() {
    console.log('async1 start')
    await async2()
    console.log('async1 end')
}
async function async2() {
    console.log('async2')
}
console.log('script start')
setTimeout(function () {
    console.log('settimeout')
})
async1()
new Promise(function (resolve) {
    console.log('promise1')
    resolve()
}).then(function () {
    console.log('promise2')
})
console.log('script end')
点击查看

script start async1 start async2 promise1 script end async1 end (放入微任务队列) promise2 settimeout

#js
上次更新: 2021/12/19, 18:05:42
说说对Dom的理解及常见操作
说说对js的执行上下文的理解

← 说说对Dom的理解及常见操作 说说对js的执行上下文的理解→

最近更新
01
多分支修复撞车的问题
05-01
02
如何成为架构师
01-23
03
服务器部署全过程
11-23
更多文章>
Theme by Vdoing | Copyright © 2019-2026 fangdown | 粤ICP备19079809号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式