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