Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有人能解释for循环中的setTimeout是如何工作的吗?这和结束有什么关系吗 var结果=0; 对于(变量i=0;i_Javascript - Fatal编程技术网

Javascript 有人能解释for循环中的setTimeout是如何工作的吗?这和结束有什么关系吗 var结果=0; 对于(变量i=0;i

Javascript 有人能解释for循环中的setTimeout是如何工作的吗?这和结束有什么关系吗 var结果=0; 对于(变量i=0;i,javascript,Javascript,为什么在这个循环结束时结果等于9而不是3?您得到9是因为您正在向循环计数器i添加result,并且这两个数字在每次循环迭代时都会增加。如果您只希望最终答案为3,那么您根本不需要结果,只需在循环的最终迭代时报告循环计数器的值即可 现在还不清楚你的目标是什么,但很多时候,当人们想要重复完成某件事情时,他们认为计时器属于循环。计时器可以通过setInterval()计时器或递归setTimeout()计时器来完成此操作,而无需任何循环。两种方法如下所示: 递归setTimeout()计时器: var

为什么在这个循环结束时结果等于9而不是3?

您得到9是因为您正在向循环计数器
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;