Javascript 有人能解释for循环中的setTimeout是如何工作的吗?这和结束有什么关系吗 var结果=0; 对于(变量i=0;i
为什么在这个循环结束时结果等于9而不是3?您得到9是因为您正在向循环计数器Javascript 有人能解释for循环中的setTimeout是如何工作的吗?这和结束有什么关系吗 var结果=0; 对于(变量i=0;i,javascript,Javascript,为什么在这个循环结束时结果等于9而不是3?您得到9是因为您正在向循环计数器i添加result,并且这两个数字在每次循环迭代时都会增加。如果您只希望最终答案为3,那么您根本不需要结果,只需在循环的最终迭代时报告循环计数器的值即可 现在还不清楚你的目标是什么,但很多时候,当人们想要重复完成某件事情时,他们认为计时器属于循环。计时器可以通过setInterval()计时器或递归setTimeout()计时器来完成此操作,而无需任何循环。两种方法如下所示: 递归setTimeout()计时器: var
i
添加result
,并且这两个数字在每次循环迭代时都会增加。如果您只希望最终答案为3,那么您根本不需要结果
,只需在循环的最终迭代时报告循环计数器的值即可
现在还不清楚你的目标是什么,但很多时候,当人们想要重复完成某件事情时,他们认为计时器属于循环。计时器可以通过setInterval()
计时器或递归setTimeout()
计时器来完成此操作,而无需任何循环。两种方法如下所示:
递归setTimeout()计时器:
var结果=0;
函数timerCallback(){
如果(结果<3){
console.log(++结果);
//第二个计时器嵌入在
//第一个计时器的回调函数。
//第二个计时器调用当前
//函数,设置循环流。
设置超时(timerCallback,1000);
}
}
//启动一次性计时器
设置超时(timerCallback,1000)代码>当您编写
var result = 0;
for (var i=0; i < 3; i++) {
setTimeout(function() {
result += i;
}, 1000);
}
结果3
然后您可以通过closure
var结果=0;
对于(变量i=0;i<3;i++){
常数j=i;
setTimeout(函数(){
结果+=j;
控制台日志(结果);
}, 1000);
}
1+(2+1)+(3+2+1)=9这将产生3个超时,所有超时将同时完成。如果希望它们按顺序执行,则需要在前一个结束时递归调用它们。@zero298不,这不对。1000是匿名函数调用延迟的毫秒数。@Griffin我一发布就编辑了它。根本问题仍然存在。您正在一次完成所有超时,而不是之前的超时。@zero298当然,但您不知道OP的意图。
var result = 0;
for (var i=0; i < 3; i++) {
setTimeout(function() {
result += i;
}, 1000);
}
var result = 0;
var i;
for (i=0; i < 3; i++) {
setTimeout(function() {
result += i;
}, 1000);
}
result += 0;
result += 1;
result += 2;