代码1
for (var i = 0; i < 5; i++) {
setTimeout(function(i) {
console.log(i);
}, i * 1000);
}
//打印了5个undefined
代码2
for (var i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i);
}, i * 1000);
}
//打印了5个5
我的理解是两个代码应该都是打印出5个5,因为i是全局的,可是结果完全不同。
想请教一下,为什么第二个代码打印出来的是5个5,而第二个却是undefined呢?
第一个setTimeout里面的方法定义了参数i,那么这个i的作用域是本函数内,如果没有传递的话,默认就是undefined。
第二个很简单了,每次setTimeout的时候,都会往异步队列里推一条语句,等for执行完了之后就会执行异步队列里的的函数了