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如何动态加载表格与动态添加表格行
Nov 27 Javascript
移除AngularJS下URL中的#字符的方法
Jun 19 Javascript
javascript框架设计之浏览器的嗅探和特征侦测
Jun 23 Javascript
jquery点赞功能实现代码 点个赞吧!
May 29 jQuery
jquery实现图片跟随鼠标的实例
Oct 17 jQuery
基于vue开发的在线付费课程应用过程
Jan 25 Javascript
webpack里使用jquery.mCustomScrollbar插件的方法
May 30 jQuery
JS div匀速移动动画与变速移动动画代码实例
Mar 26 Javascript
vue项目中使用AES实现密码加密解密(ECB和CBC两种模式)
Aug 12 Javascript
layui 实现加载动画以及非真实加载进度的方法
Sep 23 Javascript
小程序实现上下移动切换位置
Sep 23 Javascript
Vue图片裁剪组件实例代码
Jul 02 Vue.js
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
MyEclipse常用配置图文教程
2014/09/11 PHP
php函数连续调用实例分析
2015/07/30 PHP
Nginx下ThinkPHP5的配置方法详解
2017/08/01 PHP
浅析PHP7 的垃圾回收机制
2019/09/06 PHP
js列举css中所有图标的实现代码
2011/07/04 Javascript
Javascript获取窗口(容器)的大小及位置参数列举及简要说明
2012/12/09 Javascript
js添加table的行和列 具体实现方法
2013/07/22 Javascript
JQuery验证jsp页面属性是否为空(实例代码)
2013/11/08 Javascript
JavaScript 匿名函数和闭包介绍
2015/04/13 Javascript
jquery.validate 自定义验证方法及validate相关参数
2016/01/18 Javascript
基于jQuery的左滑出现删除按钮的示例
2017/08/29 jQuery
JS设计模式之数据访问对象模式的实例讲解
2017/09/30 Javascript
浅谈JS函数节流防抖
2017/10/18 Javascript
详解vue2.0监听属性的使用心得及搭配计算属性的使用
2018/07/18 Javascript
微信小程序数据统计和错误统计的实现方法
2019/06/26 Javascript
JavaScript实现多球运动效果
2020/09/07 Javascript
Python中的自省(反射)详解
2015/06/02 Python
详解Python如何获取列表(List)的中位数
2016/08/12 Python
详解python3中socket套接字的编码问题解决
2017/07/01 Python
python绘制圆柱体的方法
2018/07/02 Python
python读取LMDB中图像的方法
2018/07/02 Python
Win8下python3.5.1安装教程
2020/07/29 Python
python设置随机种子实例讲解
2019/09/12 Python
执行Python程序时模块报错问题
2020/03/26 Python
Python+OpenCV图像处理——图像二值化的实现
2020/10/24 Python
python 发送邮件的示例代码(Python2/3都可以直接使用)
2020/12/03 Python
会议邀请函范文
2014/01/09 职场文书
打架检讨书300字
2014/02/02 职场文书
《花瓣飘香》教学反思
2014/04/15 职场文书
服装发布会策划方案
2014/05/22 职场文书
中学教师暑期培训方案
2014/08/27 职场文书
银行自荐信怎么写
2015/03/05 职场文书
2015年政务公开工作总结
2015/05/19 职场文书
创业分两种人:那么哪些适合创业?,哪些适合不适合创业呢?
2019/08/23 职场文书
python实现的人脸识别打卡系统
2021/05/08 Python
浅谈react useEffect闭包的坑
2021/06/08 Javascript