我无法理解这段代码中发生了什么,它只打印13。
/*jshint loopfunc: true */
for(var i=0;i<13;i++)
setTimeout(function(){console.log(i)},10);
输出
13
13
...[10 times more]
13
如何用lambdas打印0,1,2,...,12,就像我希望的那样?
答案 0 :(得分:2)
这应该有效:
for(var i=0;i<13;i++) {
(function(j){
setTimeout(function(){console.log(j)},10);
}(i))
}
在原始代码中,i
变量一直增加到13,然后被每个console.log
语句使用。要解决这个问题,您可以创建一个匿名函数,并在循环的每次迭代中将i
变量传递给它,这有效地在调用函数时获取i
的值的快照,以便console.log
打印出所需的值。
答案 1 :(得分:0)
试试这个:
for(var i=0;i<13;i++)
setTimeout(function(index){console.log(index)}.bind(this, i),10);