for循环中使用setTimeout
2、所有同步任务在主线程中执行,形成一个“执行栈”,而异步任务都会进入到任务队列中等待,
只有当主线程里的同步任务都被执行完毕,异步任务才会进入主线程中被执行;
3、执行异步任务,就是执行对应的回调函数;
4、为什么输出的是5个5?
<script>
for(var i = 0;i<5;i++){
setTimeout(function(){
console.log(i);
},i*1000);
}
</script>
for循环在主线程中执行,而settimeout被放到了任务队列中,
for循环(假设只有这个同步任务)执行完毕后,settimeout才进入主线程被执行,
而此时i=5(因为不小于5才能跳出for循环,即for循环执行完毕时i就是等于5)。
先要输出0 1 2 3 4 可以这样写:
<script>
function timer(i) {
setTimeout(function () {
console.log(i);
}, i * 1000);
}
for (var i = 0; i < 5; i++) {
timer(i);
}
</script>