js是单线程的,所以执行任务采用同步,异步的方式进行,执行过程是如下。
也就是同步任务全部执行完成,再执行异步任务。
异步任务里面又分为宏任务和微任务。
执行顺序如下图
也就是宏任务多次执行,微任务一次执行。宏任务先执行一个,微任务全部执行,再执行剩余的宏任务
宏任务中执行优先级
微任务中优先级
再次总结就是主任务执行后,执行微任务,再执行setTimeout,setInterval,setImmediate
setTimeout(func(){},0),意思是同步任务执行完成后,主线程栈空后,然后再执行,但是主线程一直为空,由于机制问题,还是最小为4ms。
代码示例1:
console.log("宏任务优先级最高执行")
setTimeout(() => {
console.log("settimeout")
}, 10);
setImmediate(()=>{
console.log("setTmmediate")
})
let promise=new Promise((resolve,reject)=>{
console.log("promise中1执行");
resolve()
})
promise.then(()=>{
console.log("promise中2执行")
})