js实现异步循环实现代码
更新时间:2016年02月16日 14:47:44 投稿:mdxy-dxy
这篇文章主要介绍了js实现异步循环实现代码,需要的朋友可以参考下
问题
实现异步循环时,你可能会遇到问题。
让我们试着写一个异步方法,一次循环打印一次循环的索引值。
<script> for(var i = 0; i < 5; i++){ setTimeout(function(){ document.writeln(i);document.writeln("<br />"); },1000); } </script>
如上程序的输出为:
5
5
5
5
5
原因
每次时间结束(timeout)都指向原始的i,而并非它的拷贝。所以,for循环使i增长到5,之后timeout运行并调用了当前i的值(也就是5)。
解决方法
有几个不同的方式可以拷贝i。最普通且常用方法是通过声明函数来建立一个闭包,并将i传给此函数。我们这里使用了自调用函数。
运行代码
<script> for(var i = 0; i < 5; i++){ (function(num){ setTimeout(function(){ document.writeln(num);document.writeln("<br />"); },1000); })(i); } </script>
输出
0
1
2
3
4
您可能感兴趣的文章:
相关文章
(推荐一个超好的JS函数库)S.Sams Lifexperience ScriptClassLib
(推荐一个超好的JS函数库)S.Sams Lifexperience ScriptClassLib...2007-04-04contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
一个很棒的 blog 文章,是 PPK 两年前写的,文章中解释了 contains() 和 compareDocumentPosition() 方法运行在他们各自的浏览器上。2011-09-09
最新评论