js实现异步循环实现代码


Posted in Javascript onFebruary 16, 2016

问题
实现异步循环时,你可能会遇到问题。

让我们试着写一个异步方法,一次循环打印一次循环的索引值。

<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 相关文章推荐
瀑布流布局并自动加载实现代码
Mar 12 Javascript
不使用jquery实现js打字效果示例分享
Jan 19 Javascript
更高效的使用JQuery 这里总结了8个小技巧
Apr 13 Javascript
js实现5秒倒计时重新发送短信功能
Feb 05 Javascript
超级简易的JS计算器实例讲解(实现加减乘除)
Aug 08 Javascript
react.js使用webpack搭配环境的入门教程
Aug 14 Javascript
Angular实现预加载延迟模块的示例
Oct 12 Javascript
详解ES6中的 Set Map 数据结构学习总结
Nov 06 Javascript
在node中使用jwt签发与验证token的方法
Apr 03 Javascript
详解服务端预渲染之Nuxt(介绍篇)
Apr 07 Javascript
详解key在Vue列表渲染时究竟起到了什么作用
Apr 20 Javascript
js常用正则表达式集锦
May 17 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(二)
Feb 16 #Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(一)
Feb 16 #Javascript
javascript HTML+CSS实现经典橙色导航菜单
Feb 16 #Javascript
JavaScript中使用数组方法汇总
Feb 16 #Javascript
jquery拖拽排序简单实现方法(效果增强版)
Feb 16 #Javascript
jquery实现具有收缩功能的垂直导航菜单
Feb 16 #Javascript
学习使用AngularJS文件上传控件
Feb 16 #Javascript
You might like
DOTA2【瓜皮时刻】Vol.91 RTZ山史最惨“矿难”
2021/03/05 DOTA
php preg_match的匹配不同国家语言实例
2016/12/29 PHP
JavaScript 原型继承之构造函数继承
2011/08/26 Javascript
jquery文本框中的事件应用以输入邮箱为例
2014/05/06 Javascript
一个不错的字符串转码解码函数(自写)
2014/07/31 Javascript
js实现网页右上角滑出会自动消失大幅广告的方法
2015/02/27 Javascript
jquery中ready()函数执行的时机和window的load事件比较
2015/06/22 Javascript
充分发挥Node.js程序性能的一些方法介绍
2015/06/23 Javascript
js仿3366小游戏选字游戏
2016/04/14 Javascript
EasyUI Pagination 分页的两种做法小结
2016/07/09 Javascript
JavaScript html5利用FileReader实现上传功能
2020/03/27 Javascript
AngularJS中$http的交互问题
2017/03/29 Javascript
详解webpack异步加载业务模块
2017/06/23 Javascript
Vue.js分页组件实现:diVuePagination的使用详解
2018/01/10 Javascript
nodejs实现连接mongodb数据库的方法示例
2018/03/15 NodeJs
vue项目打包部署到服务器的方法示例
2018/08/27 Javascript
如何为你的JS项目添加智能提示与类型检查详解
2019/03/12 Javascript
Vue根据条件添加click事件的方式
2019/11/09 Javascript
JavaScript实现模态对话框实例
2020/01/13 Javascript
[02:10]DOTA2亚洲邀请赛 EG战队出场宣传片
2015/02/07 DOTA
使用Python制作微信跳一跳辅助
2018/01/31 Python
python 多线程重启方法
2019/02/18 Python
python matplotlib库绘制条形图练习题
2019/08/10 Python
Python装饰器使用你可能不知道的几种姿势
2019/10/25 Python
实例讲解使用CSS实现多边框和透明边框的方法
2015/09/08 HTML / CSS
纯html5+css3下拉导航菜单实现代码
2013/03/18 HTML / CSS
应用英语专业自荐信
2014/01/26 职场文书
绿色环保演讲稿
2014/05/10 职场文书
2014年领导班子专项整治整改方案
2014/09/28 职场文书
公务员检讨书
2014/11/01 职场文书
2014年仓管员工作总结
2014/11/18 职场文书
如何写辞职书
2015/02/26 职场文书
2015最新婚礼司仪主持词
2015/06/30 职场文书
2019年年中工作总结讲话稿模板
2019/03/25 职场文书
2019中秋节祝福语大全,提前收藏啦
2019/09/10 职场文书
Golang并发操作中常见的读写锁详析
2021/08/30 Golang