我知道浮点变量在处理0.1,0.2,0.3等时需要解决..但这似乎不寻常?
for(var i=0;i<10;i=i+1){
console.log("before timeout" + i/10); //returns 0.1 0.2 0.3 etc
setTimeout(function(){
console.log("after timeout" + i/10); //returns 1 1 1 etc
},1000);
}
答案 0 :(得分:3)
变量“i”始终为“10”,因为超时将在for循环后调用。所以你总是得到整数,因为你把它分成10个
为了你自己的利益这样做:)
for(var i=0;i<10;i=i+1){
console.log("before timeout" + i/10);
setTimeout(function(i){
console.log("after timeout" + i/10);
},1000, i);
}
答案 1 :(得分:1)
你有一个关闭问题。 i
将始终为10,因为setTimeouts在循环完成后解析。您可以通过将i
传递给立即执行的函数来隔离for(var i=0;i<10;i=i+1){
console.log("before timeout" + i/10);
(function(i){
setTimeout(function(){
console.log("after timeout" + i/10);
},1000);
})(i);
}
:
{{1}}
答案 2 :(得分:1)
for
循环完成后,您的超时时间已开始...此时i
已设置为10,因此所有提醒都正确,i/10
为1。应该使用闭包或类似的技术来获得你期望的结果。
for (var i = 0; i < 10; i = i + 1) {
alert("before timeout" + i / 10); //returns 0.1 0.2 0.3 etc
setTimeout(
(function(j) {
return function() {
alert("after timeout" + j / 10); //returns 1 1 1 etc
}
})(i)
);
}
&#13;
答案 3 :(得分:0)
这是因为&#39; i&#39;在第二个警报中始终为10。在我已达到其最大值(在这种情况下为10)后,您可以将代码执行到setTimeOut(function(){....},1000)
。