标签:
1 for (var i=1; i<=5; i++) {
2 setTimeout(function timer() {
3 console.log(i);
4 }, i*1000);
5 }
预期:分别输出数字 1-5,每秒一次,每次一个。
实际上,会每秒一次输出 5次6,。
知识点:
在上例中,
尽管循环中的五个函数在各个迭代中分别定义,但都被封闭在一个共享的全局作用域中。全局作用域中只有一个i。
解决方案:
1 for (var i=1; i<=5; i++) {
2 (function() {
3 setTimeout( function timer() {
4 console.log( i );
5 }, i*1000);
6 })();
7 }
1 for (var i=1; i<=5; i++) { 2 (function() { 3 var j = i; 4 setTimeout( function timer() { 5 console.log( j ); 6 }, j*1000); 7 })(); 8 }
参考资料:
你不知道的JS
标签:
原文地址:http://www.cnblogs.com/xhz-dalalala/p/5662033.html