for (var i=1; i<=5; i++) { setTimeout( function timer() {
console.log( i );
}, i*1000 );
}
上图,看起来,会输出 ,1,2,3,4,5,6
但实际是6个6
如果我们象下面这样写:
for (var i=1; i<=5; i++) { (function() {
setTimeout( function timer() { console.log( i );
}, i*1000 );
})();
}
你认为结果是?
依然是6个6
因此,function timer() 它需要有自己的变量,用来在每个迭代中储存 i 的值:
for (var i=1; i<=5; i++) { (function() {
var j = i;
setTimeout( function timer() {
console.log( j );
}, j*1000 );
})(); }