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中detach()方法用法实例
Dec 25 Javascript
jquery实现可横向和竖向展开的动态下滑菜单效果
Aug 24 Javascript
很全面的JavaScript常用功能汇总集合
Jan 22 Javascript
仅30行代码实现Javascript中的MVC
Feb 15 Javascript
jQuery Ajax 异步加载显示等待效果代码分享
Aug 01 Javascript
AngularJS基础 ng-paste 指令简单示例
Aug 02 Javascript
Node.js与MySQL交互操作及其注意事项
Oct 05 Javascript
webpack多入口文件页面打包配置详解
Jan 09 Javascript
解决vue项目input输入框双向绑定数据不实时生效问题
Aug 05 Javascript
浅谈vue 二级路由嵌套和二级路由高亮问题
Aug 06 Javascript
vue使用v-model进行跨组件绑定的基本实现方法
Apr 28 Vue.js
如何通过简单的代码描述Angular父组件、子组件传值
Apr 07 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调用google接口生成二维码示例
2014/04/28 PHP
php之可变变量的实例详解
2017/09/12 PHP
laravel 模型查询按照whereIn排序的示例
2019/10/16 PHP
laravel5 Eloquent 实现事务方式
2019/10/21 PHP
JS中showModalDialog 的使用解析
2013/04/17 Javascript
关于jQuery新的事件绑定机制on()的使用技巧
2013/04/26 Javascript
使用javascript实现监控视频播放并打印日志
2015/01/05 Javascript
详解JavaScript时间格式化
2015/12/23 Javascript
jquery+json实现分页效果
2016/03/07 Javascript
jQuery控制div实现随滚动条滚动效果
2016/06/07 Javascript
js动态添加的DIV中的onclick事件简单实例
2016/07/25 Javascript
jQuery实现鼠标经过像翻页和描点链接效果
2016/08/08 Javascript
基于JavaScript实现购物车功能
2017/02/07 Javascript
微信小程序之电影影评小程序制作代码
2017/08/03 Javascript
Java设计中的Builder模式的介绍
2018/03/22 Javascript
Vue项目全局配置页面缓存之按需读取缓存的实现详解
2018/08/01 Javascript
详解Vue+axios+Node+express实现文件上传(用户头像上传)
2018/08/10 Javascript
了解重排与重绘
2019/05/29 Javascript
vue-cli3跨域配置的简单方法
2019/09/06 Javascript
Linux下Pycharm、Anaconda环境配置及使用踩坑
2018/12/19 Python
python中的数据结构比较
2019/05/13 Python
Python求均值,方差,标准差的实例
2019/06/29 Python
Python终端输出彩色字符方法详解
2020/02/11 Python
matplotlib实现数据实时刷新的示例代码
2021/01/05 Python
Python接口自动化系列之unittest结合ddt的使用教程详解
2021/02/23 Python
python 如何用urllib与服务端交互(发送和接收数据)
2021/03/04 Python
KIKO美国官网:意大利的平价彩妆品牌
2017/05/16 全球购物
时尚圣经:The Fashion Bible
2019/03/03 全球购物
python+selenium小米商城红米K40手机自动抢购的示例代码
2021/03/24 Python
会计专业职业规划:规划自我赢取未来
2014/02/12 职场文书
银行职员个人的工作自我评价
2014/02/15 职场文书
数控专业毕业生自荐信范文
2014/03/04 职场文书
经典促销广告词大全
2014/03/19 职场文书
微电影大赛策划方案
2014/06/05 职场文书
私人委托书格式
2014/09/10 职场文书
使用Nginx搭载rtmp直播服务器的方法
2021/10/16 Servers