概念:
1. 宏任务:当前调用栈中执行的代码成为宏任务。(主代码快,定时器等等)。
2.微任务: 当前(此次事件循环中)宏任务执行完,在下一个宏任务开始之前需要执行的任务,可以理解为回调事件。(promise.then,proness.nextTick等等)。 3. 宏任务中的事件放在callback queue中,由事件触发线程维护;微任务的事件放在微任务队列中,由js引擎线程维护。
js执行顺序,(先执行宏任务列再是微任务队列)
例子1:
for(var i=0;i<10;i++){
setTimeout(function(){
console.log(i)
},0)
}
输出 10个10
‘-------------------------------------------------------------------------------’
2,加立即执行函数
分析:尽管循环执行结束,i值已经变成了3。但因遇到了自执行函数,当时的i值已经被 lockedIndex锁住了。也可以理解为 自执行函数属于for循环一部分,每次遍历i,自执行函数也会立即执行。所以尽管有延时器,但依旧会保留住立即执行时的i值。
for(var i=0;i<10;i++){
(function(i){
setTimeout(function(){
console.log(i)
},0)
})(i)
}
输出 正常 i 值序号