setTimeout和for

时间:2015-01-11 08:37:51

标签: javascript jquery

我的代码如下。

的script.js

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

<html>
    <head>
    </head>
    <body>
    <div></div>
    <script type="text/javascript" src="jquery.js"></script>
    <script type="text/javascript" src="script.js"></script>
    </body>
</html>

我想要显示

(SEC1)00000000000

(秒2)00000000000123456789

(SEC3)000000000001234567890246891012141618

...

,但显示

(SEC1)100100100100100100100100100100

(秒2)100100100100100100100100100100100100100100100100100100100100

(SEC3)100100100100100100100100100100100100100100100100100100100100100100100100100100100100100100

...

为什么?我该怎么办?

1 个答案:

答案 0 :(得分:0)

for循环运行至完成调度100 setTimeout()次调用。此时,ij都指向for循环的结束值,这是调用setTimeout()回调时的结果。< / p>

如果您想在i回调中使用jsetTimeout(),则必须创建一个闭包,以便通过for为每个周期唯一地设置其值循环。

还有许多其他答案说明了如何执行此操作的详细信息。以下是一些:

Asynchronous Process inside a javascript for loop

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