JS函数的调用时机不同,得到的结果不同
let i = 0
for(i = 0;i < 6;i++){
setTimeout(()=>{
console.log(i)
},0)
}
//输出为6个6原因:setTimeout是一个异步任务,执行到这里的操作会被浏览器丢到异步任务队列里去, 浏览器这时候会继续执行for循环。每一次for循环的时候,setTimeout都执行一次,但是里面的函数没有被执行,而是被放到了异步任务队列里面,等待执行,for循环了6次,就放了6次,当主线程执行完成后,才进入异步任务队列里面执行。这时候因为for循环i=6了,所以输出的全部都是6。
JS的执行顺序,先同步后异步,异步中任务队列的执行顺序: 先微任务队列,再宏任务队列,详细参考下方链接:
www.jianshu.com/p/ca480f9e7…
改进上面代码使其打印出0-5:
//方法一:
for(let i = 0;i < 6;i++){
setTimeout(()=>{
console.log(i)
},0)
}
//let谢谢你
//方法二:
for(var i = 0;i<6;i++){
setTimeout((function(i){
console.log(i)
})(i),0)
}