以下代码执行后,5 秒后内控制台输出的信息是?
for(var i = 0; i < 5; i++){
setTimeout(function(){
console.log(i);
}, 1000 * i);
}
5 5 5 5 5
将for循环的var换成let后,输出就会变成0 1 2 3 4
在所有同步任务执行完之前,任何的异步任务是不会执行的。 而setTimeout就是一个异步任务,所以会先执行for循环这个同步任务,把setTimeout()放进任务队列中等待主线程的for循环执行完毕,一旦"执行栈"中的所有同步任务执行完毕(循环结束后此时i=5)就会从队列中取出setTimeout()
将for循环的var换成let后,输出就会变成0 1 2 3 4