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 相关文章推荐
Javascript学习笔记4 Eval函数
Jan 11 Javascript
mailto的使用技巧分享
Dec 21 Javascript
表单验证的完整应用案例探讨
Mar 29 Javascript
原生Js实现元素渐隐/渐现(原理为修改元素的css透明度)
Jun 24 Javascript
在JavaScript应用中使用RequireJS来实现延迟加载
Jul 01 Javascript
javascript设计简单的秒表计时器
Sep 05 Javascript
AngularJS 模型详细介绍及实例代码
Jul 27 Javascript
Javascript中indexOf()和lastIndexOf应用方法实例
Aug 24 Javascript
利用Vue实现一个markdown编辑器实例代码
May 19 Javascript
使用Vue-cli3.0创建的项目 如何发布npm包
Oct 10 Javascript
jquery实现垂直手风琴菜单
Mar 04 jQuery
如何在JavaScript中使用localStorage详情
Feb 04 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
php smarty截取中文字符乱码问题?gb2312/utf-8
2011/11/07 PHP
Codeigniter检测表单post数据的方法
2015/03/21 PHP
php准确计算复活节日期的方法
2015/04/18 PHP
PHP实现的字符串匹配算法示例【sunday算法】
2017/12/19 PHP
php将从数据库中获得的数据转换成json格式并输出的方法
2018/08/21 PHP
Javascript实现的鼠标经过时播放声音
2010/05/18 Javascript
ASP 过滤数组重复数据函数(加强版)
2010/05/31 Javascript
jquery验证表单中的单选与多选实例
2013/08/18 Javascript
什么是cookie?js手动创建和存储cookie
2014/05/27 Javascript
利用Node.JS实现邮件发送功能
2016/10/21 Javascript
原生js实现放大镜
2017/02/20 Javascript
JavaScript队列函数和异步执行详解
2017/06/19 Javascript
JS+HTML5实现图片在线预览功能
2017/07/22 Javascript
微信小程序开发animation心跳动画效果
2017/08/16 Javascript
微信小程序的生命周期的详解
2017/10/19 Javascript
vue-cli 自定义指令directive 添加验证滑块示例
2017/10/19 Javascript
vue 的keep-alive缓存功能的实现
2018/03/22 Javascript
图文讲解用vue-cli脚手架创建vue项目步骤
2019/02/12 Javascript
js实现网页同时进行多个倒计时功能
2019/02/25 Javascript
node实现mock-plugin中间件的方法
2019/12/25 Javascript
Python类的多重继承问题深入分析
2014/11/09 Python
探究Python的Tornado框架对子域名和泛域名的支持
2015/05/02 Python
Python3.6实现连接mysql或mariadb的方法分析
2018/05/18 Python
python excel转换csv代码实例
2019/08/26 Python
Python递归求出列表(包括列表中的子列表)的最大值实例
2020/02/27 Python
python opencv实现图片缺陷检测(讲解直方图以及相关系数对比法)
2020/04/07 Python
python3通过qq邮箱发送邮件以及附件
2020/05/20 Python
opencv之颜色过滤只留下图片中的红色区域操作
2020/06/05 Python
python语音识别指南终极版(有这一篇足矣)
2020/09/09 Python
详解CSS3选择器的使用方法汇总
2015/11/24 HTML / CSS
自我鉴定总结
2014/03/24 职场文书
违纪检讨书
2015/01/27 职场文书
千与千寻观后感
2015/06/04 职场文书
校运会班级霸气口号
2015/12/24 职场文书
2016机关干部作风建设心得体会
2016/01/21 职场文书
Java实现字符串转为驼峰格式的方法详解
2022/07/07 Java/Android