话不多说,直接上代码
for(let i=0;i<3;i++){ //使用let和var声明循环变量是不同的
setTimeout(function(){
console.log(i);
},0);
}
console.log("I am main");
使用let和var声明循环变量的区别见我的这篇文章Js/es for(let i in Obj)效率分析及优化
上边的例子输出结果
当我们设置setTimeout(func,0);
时,func将会被压入一个数组保存,他们的调用将等到当前脚本运行结束之后,即在下一次事件循环才会调用。所以才会出现”I am main”字符串。至于为什么出现012不同的值需要您去看下我的这篇文章Js/es for(let i in Obj)效率分析及优化
调用顺序
他们的调用顺序是按数组下标从小到大的顺序调用,在这里应该是用[].shift();
从数组开始不断弹出调用的。