有幸看到这位博主的文章 for循环中闭包问题
但是不理解:
这里,为什么会打印66666
for (var i=1; i<=5; i++) {
(function() {
setTimeout( function timer() {
console.log( i );
}, i*1000 );
})();
}
/*
6
6
6
6
6
*/
而这里,仅仅多增加了一步 var j = i
,或者说将i
当作参数传进去,结果就大不一样。
为什么呢?
上面第一段代码中仅有的 console.log(i)
不算事闭包内对外部函数的引用吗?
for (var i=1; i<=5; i++) {
(function() {
var j = i;//保存外部变量
setTimeout( function timer() {
console.log( j );
}, j*1000 );
})();
}
/*
1
2
3
4
5
*/
//代码改进:(将i当参数传进去)
for (var i=1; i<=5; i++) {
(function(j) {
setTimeout( function timer() {
console.log( j );
}, j*1000 );
})( i );
}
https://zhuanlan.zhihu.com/p/...