js实现异步循环实现代码
作者:bea
问题 实现异步循环时,你可能会遇到问题。 让我们试着写一个异步方法,一次循环打印一次循环的索引值。 <script>for(var i = 0; i < 5; i++){setTimeout(function(){document.writeln(i);document.writeln("<br />");},1000);}</script> 如上程序的输出为: 5 5 5 5 5 原因 每次时间结束(timeout)都
问题
实现异步循环时,你可能会遇到问题。
让我们试着写一个异步方法,一次循环打印一次循环的索引值。
<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
猜你喜欢
您可能感兴趣的文章:
- Javascript实现图片轮播效果(一)让图片跳动起来
- 基于javascript简单实现对身份证校验
- 使用jQuery判断Div是否在可视区域的方法 判断div是否可见
- Bootstrap布局组件应用实例讲解
- 深入php面向对象、模式与实践
- 三个js循环的关键字示例(for与while)
- 解析Node.js异常处理中domain模块的使用方法
- jQuery Timelinr实现垂直水平时间轴插件(附源码下载)
- 深入浅析AngularJS和DataModel
- Javascript中的Prototype到底是什么
- 剖析Node.js异步编程中的回调与代码设计模式
- 使用Node.js处理前端代码文件的编码问题
- 让图片跳跃起来 javascript图片轮播特效
- Node.js本地文件操作之文件拷贝与目录遍历的方法
- 详解Node.js包的工程目录与NPM包管理器的使用
- javascript每日必学之运算符
- 解析Node.js基于模块和包的代码部署方式
- javascript每日必学之基础入门
- 快速掌握Node.js环境的安装与运行方法