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 相关文章推荐
JQuery入门——事件切换之toggle()方法应用介绍
Feb 05 Javascript
如何通过javascript操作web控件的自定义属性
Nov 25 Javascript
javascript下拉列表菜单的实现方法
Nov 18 Javascript
完美实现bootstrap分页查询
Dec 09 Javascript
AngularJS表格样式简单设置方法示例
Mar 03 Javascript
详解用node搭建简单的静态资源管理器
Aug 09 Javascript
JS中数组与对象的遍历方法实例小结
Aug 14 Javascript
微信小程序如何使用globalData的方法
Jun 06 Javascript
在Vue中使用icon 字体图标的方法
Jun 14 Javascript
laravel实现中文和英语互相切换的例子
Sep 30 Javascript
微信小程序中网络请求缓存的解决方法
Dec 29 Javascript
Javascript组合继承方法代码实例解析
Apr 02 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
《OVERLORD》第四季,终于等到你!
2020/03/02 日漫
php中文字母数字验证码实现代码
2008/04/25 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
PHP内部实现打乱字符串顺序函数str_shuffle的方法
2019/02/14 PHP
PHP实现支持CURL字符串证书传输的方法
2019/03/23 PHP
IE6下js通过css隐藏select的一个bug
2010/08/16 Javascript
JavaScript限定图片显示大小的方法
2015/03/11 Javascript
JS+CSS实现自动切换的网页滑动门菜单效果代码
2015/09/14 Javascript
基于jQuery和CSS3制作数字时钟附源码下载(jquery篇)
2015/11/24 Javascript
JQuery解析XML的方法小结
2016/04/02 Javascript
JS实现pasteHTML兼容ie,firefox,chrome的方法
2016/06/22 Javascript
JavaScript页面实时显示当前时间实例代码
2016/10/23 Javascript
Angular.JS去掉访问路径URL中的#号详解
2017/03/30 Javascript
IScroll5实现下拉刷新上拉加载的功能实例
2017/08/11 Javascript
深入理解js 中async 函数的含义和用法
2018/05/13 Javascript
Vue Element 分组+多选+可搜索Select选择器实现示例
2018/07/23 Javascript
angularjs的单选框+ng-repeat的实现方法
2018/09/12 Javascript
vue中render函数的使用详解
2018/10/12 Javascript
在Uni中使用Vue的EventBus总线机制操作
2020/07/31 Javascript
python使用pyhook监控键盘并实现切换歌曲的功能
2014/07/18 Python
Python中lambda的用法及其与def的区别解析
2014/07/28 Python
在Python中操作文件之truncate()方法的使用教程
2015/05/25 Python
pycharm: 恢复(reset) 误删文件的方法
2018/10/22 Python
详解用python计算阶乘的几种方法
2019/08/14 Python
python爬虫 Pyppeteer使用方法解析
2019/09/28 Python
Python socket模块ftp传输文件过程解析
2019/11/05 Python
pytorch 归一化与反归一化实例
2019/12/31 Python
Tensorflow 自定义loss的情况下初始化部分变量方式
2020/01/06 Python
CSS Grid布局教程之什么是网格布局
2014/12/30 HTML / CSS
BOSE德国官网:尽探索之力,享音乐之极
2016/12/11 全球购物
暑假实习求职信范文
2013/09/22 职场文书
化工专业求职信
2014/07/01 职场文书
物理学专业求职信
2014/07/04 职场文书
大学生求职自荐信范文
2015/03/04 职场文书
2015年大学组织委员个人工作总结
2015/10/23 职场文书
PYTHON基于Pyecharts绘制常见的直角坐标系图表
2022/04/28 Python