前端大杂烩前端开发那些事儿

JS 执行机制

2021-04-20  本文已影响0人  lio_zero

JS 是一门单线程语言,最新的 HTML5 中提出了 Web-Worker,但 JavaScript 是单线程这一核心仍未改变。

JS 单线程基于事件循环:分为异步和同步。同步执行完,在执行异步中的内容

更加精确的定义

任务队列又分为宏任务队列微任务队列

事件循环

  1. 进入脚本执行宏任务,自上而下运行
  2. 遇到同步代码按顺序执行,遇到宏任务放入宏任务队列,遇到微任务放入微任务队列
  3. 执行完当前宏任务,执行微任务中执行完并正在等待执行的任务
  4. 执行下一个宏任务,这样周而复始的执行顺序被称为事件循环

JS 的执行顺序和声明以及引用的顺序有关,先声明的顺序先执行,后声明的顺序后执行(如果有两个同名方法,后声明的会覆盖先声明的)

题目

// 以下代码在 Node 环境运行:process.nextTick 由 Node 提供
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")
  })
})

// 最终输出:1 7 6 8 2 4 3 5 9 11 10 12

上一篇 下一篇

猜你喜欢

热点阅读