我的代码如下。
的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
...
为什么?我该怎么办?
答案 0 :(得分:0)
for
循环运行至完成调度100 setTimeout()
次调用。此时,i
和j
都指向for
循环的结束值,这是调用setTimeout()
回调时的结果。< / p>
如果您想在i
回调中使用j
和setTimeout()
,则必须创建一个闭包,以便通过for
为每个周期唯一地设置其值循环。
还有许多其他答案说明了如何执行此操作的详细信息。以下是一些:
Asynchronous Process inside a javascript for loop
Why is the loop assigning a reference of the last index element to?