JS 的执行机制 Event Loop

70 阅读1分钟

浏览器的组成:

image.png

  • JS 是单线程语言,一次只能执行一个任务,所有的任务都需要排队,排队的队列叫做:事件循环 Event Loop,所以 Event Loop 就是 js 的执行机制
  • js 单线程
  • js 作为浏览器脚本语言,主要用来与用户进行交互,需要进行 dom 操作,为了避免了同 时操作 DOM 的矛盾,所以 js 是单线程的

EventLoop事件循环

image.png

例
<script>
// 1 号
setTimeout(()=>{
  console.log(1);
},2000)

// 2 号
console.log(2);

// 3 号
setTimeout(()=>{
  console.log(3);
},0)

// 4 号
console.log(4);

// 5 号
document.addEventListener('click',()=>{
  console.log(5);
})
  </script>

当执行栈拿到1号代码,执行setTimeout()销毁并把()=>{ console.log(1) }函数开启定时器,交给Web APIs 等待执行,执行栈拿到2号代码执行并销毁控制台打印出2,以此类推,在代码执行的同时作为多线程浏览器Web APIs把等待执行的代码传到任务队列,当代码区代码执行完毕,执行栈空闲,Event Loop就会把任务队列的代码交给执行栈(这个过程就叫Event Loop)。(Web APIs只能把代码交给任务队列)

image.png