JS运行机制

JS单线程
任务队列
Event Loop
https://juejin.im/post/594156e6fe88c2006a4e5235

console.log('1');//同步任务优先
setTimeout(function(){//异步任务
  console.log('2')
},0)
//1,2

JS是单线程的(在同一时间只能做一件事)

任务队列:
同步任务(优先)
异步任务(挂起)

console.log('A');//同步任务
while(true){//不停循环 
}
console.log('B');//执行不到
//A
console.log('A');
setTimeout(function(){
  console.log('B')
},0)
while(1){
}
//A
for(var i = 0; i  <  4; i++){
  setTimeout(function(){//异步队列
  console.log(i)
},1000);
}
//4444
for循环在执行过程中,遇到setTimeout定时器,到时间才把i到异步队列

异步任务的放入和执行时间不同。

异步任务分两类:
macro-task:又叫task queue,宏任务
包括:
script(整体代码),setTimeout,setInterval,setImmediate,I/O,UI rendering.
micro-task:微任务
包括:
process.nextTick,Promise(这里指浏览器实现的原生Promise),object.observe,MutationObserver
注:全部代码(script)算是macrotask

你可能感兴趣的:(JS运行机制)