JS的for循环包裹异步函数的问题
for (var i=0; i<5; i++)
{ console.log(i) }
结果:0,1,2,3,4
for (var i=0; i<5; i++)
{
setTimeout(
function(){
console.log(i)
},0 ) }
结果:5,5,5,5,5
虽然setTimeout函数在每次循环的开始就调用了,但是却被放到循环结束才执行,循环结束,此时i=5,接连打印了5次5。
这里涉及到javascript单线程执行的问题:javascript在浏览器中是单线程执行的,必须在完成当前任务后才执行队列中的下一个任务。
另外,对于javascript还维护着一个setTimeout队列,未执行的setTimeout任务就按出现的顺序放到setTimeout队列,等待普通的任务队列中的任务执行完才开始按顺序执行积累在setTimeout中的任务。
所以在这个问题里,将setTimeout任务放到setTimeout任务队列,等循环中的打印任务执行完了,才开始执行setTimeout队列中的函数,所以在最后会接着打印5次5。