传递给超时函数时小数点被删除了吗?
Decimal point removed when passed into a timeout function?
我知道浮点变量在处理 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);
}
变量"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);
}
这是因为 'i' 在第二次警报中始终为 10。在 i 已经达到其最大值(在本例中为 10)后,您将代码执行到 setTimeOut(function(){....},1000)
。
您遇到了关闭问题。 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);
}
您的超时在 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)
);
}
我知道浮点变量在处理 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);
}
变量"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);
}
这是因为 'i' 在第二次警报中始终为 10。在 i 已经达到其最大值(在本例中为 10)后,您将代码执行到 setTimeOut(function(){....},1000)
。
您遇到了关闭问题。 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);
}
您的超时在 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)
);
}