求助个 javascript 中 setimeout 的问题

2014-12-20 14:23:59 +08:00
 supman
for (var i = 0; i < 10; i++) {
setTimeout(function(){alert(i)}, 8000*i);

}

好不容易把setimeout用在了for循环, 现在又来问题了, 就是每次alert() 打印出来的时间, 都是10, 而不是从1~10. 请问要怎么破呢??

http://jsfiddle.net/ (javascript在线运行)

谢啦:)
2012 次点击
所在节点    问与答
3 条回复
skybr
2014-12-20 14:39:26 +08:00
setTimeout( alert.bind(this, i), 8000*i);
Mutoo
2014-12-20 14:43:48 +08:00
由于js 里词法作用域的关系 function 里的 i 引用的是闭包中的 i 当程序执行到 function 的时候,i 已经变成 10 了。setTimeout 的时候并没有保留当时的 i 的副本,所以可以这样改:

for (var i = 0; i < 10; i++) {
setTimeout(function(x){alert(x)}, 8000*i, i);
}
supman
2014-12-20 14:53:43 +08:00
@skybr
@Mutoo

谢谢两位啦, 两种方法都有效 :) 谢谢Mutoo的解释 :)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/155311

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX