js实现异步循环实现代码
2016-02-16 00:00
633 查看
问题
实现异步循环时,你可能会遇到问题。
让我们试着写一个异步方法,一次循环打印一次循环的索引值。
如上程序的输出为:
5
5
5
5
5
原因
每次时间结束(timeout)都指向原始的i,而并非它的拷贝。所以,for循环使i增长到5,之后timeout运行并调用了当前i的值(也就是5)。
解决方法
有几个不同的方式可以拷贝i。最普通且常用方法是通过声明函数来建立一个闭包,并将i传给此函数。我们这里使用了自调用函数。
运行代码
输出
0
1
2
3
4
实现异步循环时,你可能会遇到问题。
让我们试着写一个异步方法,一次循环打印一次循环的索引值。
<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图片轮播特效
- Javascript中的Prototype到底是什么
- 三个js循环的关键字示例(for与while)
- js文章快速分享代码
- JSのGoogle Map
- JSP+Servlet中使用cos.jar进行图片上传(文件上传亦然)
- 30行代码实现Javascript中的MVC
- JS中的bind方法与函数柯里化
- JVM统计监测工具
- JavaScript 总结几个提高性能知识点
- javascript面向对象编程方式
- javascript正则表达式验证IP,URL
- HTML静态网页--JavaScript-Window.document对象
- HTML静态网页--JavaScript-DOW操作
- HTML静态网页--JavaScript-语法
- HTML静态网页--JavaScript-简介
- JavaScript 笔记 7 - 字符串对象
- JavaScript的学习
- javascript-页面跳转-(咋个办呢-zgbn)