setTimeout 和 for

6 浏览
0 Comments

setTimeout 和 for

我的代码如下。

var main = function(){

for(var j=0; j<10; j++){

for(var i=0; i<10; i++){

setTimeout(function(){$('div').append(i*j);}, 1000*j);

};

};

};

$(document).ready(main);

index.html

我希望显示如下

(第一秒)00000000000

(第二秒)00000000000123456789

(第三秒)000000000001234567890246891012141618

......

但实际显示为

(第一秒)100100100100100100100100100100

(第二秒)100100100100100100100100100100100100100100100100100100100100

(第三秒)100100100100100100100100100100100100100100100100100100100100100100100100100100100100100

......

为什么?我应该怎么做?

0
0 Comments

在这段内容中,出现了一个问题:在使用for循环时,调度了100个setTimeout()调用,但在这个点上,ij都指向for循环的结束值,这也是在调用setTimeout()回调时它们的值。如果想在setTimeout()回调中使用ij,就需要创建一个闭包来为每次循环唯一地捕获它们的值。

为了解决这个问题,有很多其他的答案提供了如何实现的细节。以下是其中一些答案的链接:

- Asynchronous Process inside a javascript for loop

- Why is the loop assigning a reference of the last index element to?

这些链接提供了关于如何使用闭包来解决setTimeout()for循环的问题的详细信息。

0