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使用JSONP时产生的错误
Dec 02 Javascript
js console.log打印对像与数组用法详解
Jan 21 Javascript
Node.js如何自动审核团队的代码
Jul 20 Javascript
BootstrapValidator不触发校验的实现代码
Sep 28 Javascript
js 单引号替换成双引号,双引号替换成单引号的实现方法
Feb 16 Javascript
vue2 中如何实现动态表单增删改查实例
Jun 09 Javascript
js 取消页面可以选中文字的功能方法
Jan 02 Javascript
vue-awesome-swiper 基于vue实现h5滑动翻页效果【推荐】
Nov 08 Javascript
深入学习JavaScript 高阶函数
Jun 11 Javascript
layer.alert回调函数执行关闭弹窗的实例
Sep 11 Javascript
优雅的使用javascript递归画一棵结构树示例代码
Sep 22 Javascript
Vue实现鼠标经过文字显示悬浮框效果的示例代码
Oct 14 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实现二叉树的深度优先与广度优先遍历方法
2015/09/28 PHP
使用Yii2实现主从数据库设置
2016/11/20 PHP
JS 容错处理代码, 屏蔽错误信息
2021/03/09 Javascript
jQuery链式操作如何实现以及为什么要用链式操作
2013/01/17 Javascript
jquery获取复选框被选中的值
2014/03/22 Javascript
checkbox选中与未选中判断示例
2014/08/04 Javascript
Jquery 实现grid绑定模板
2015/01/28 Javascript
jQuery手机浏览器中拖拽动作的艰难性分析
2015/02/04 Javascript
jQuery formValidator表单验证
2016/01/07 Javascript
AngularJs 弹出模态框(model)
2016/04/07 Javascript
js事件冒泡与事件捕获详解
2017/02/20 Javascript
vue使用vue-cli快速创建工程
2017/07/28 Javascript
原生JS实现多个小球碰撞反弹效果示例
2018/01/31 Javascript
最适应的vue.js的form提交涉及多种插件【推荐】
2018/08/27 Javascript
在vue中给列表中的奇数行添加class的实现方法
2018/09/05 Javascript
Vue项目中使用better-scroll实现一个轮播图自动播放功能
2018/12/03 Javascript
tornado框架blog模块分析与使用
2013/11/21 Python
Python爬取数据并写入MySQL数据库的实例
2018/06/21 Python
使用pyqt5 tablewidget 单元格设置正则表达式
2019/12/13 Python
Django执行源生mysql语句实现过程解析
2020/11/12 Python
详解python中的异常捕获
2020/12/15 Python
德国网上花店:Valentins
2018/08/15 全球购物
世界上最全面的草药补充剂和顶级品牌维生素网站:HerbsPro
2019/01/20 全球购物
日本航空官方网站:JAL
2019/06/19 全球购物
怎样声明子类
2013/07/02 面试题
自荐信格式简述
2014/01/25 职场文书
个人授权委托书范本
2014/04/03 职场文书
收款委托书范本
2014/09/11 职场文书
2015年幼儿园卫生保健工作总结
2015/05/12 职场文书
医疗纠纷调解协议书
2015/08/06 职场文书
死磕 java同步系列之synchronized解析
2021/06/28 Java/Android
Python实现滑雪小游戏
2021/09/25 Python
golang生成vcf通讯录格式文件详情
2022/03/25 Golang
docker compose 部署 golang 的 Athens 私有代理问题
2022/04/28 Servers
关于的python五子棋的算法
2022/05/02 Python
VMware虚拟机安装 Windows Server 2022的详细图文教程
2022/09/23 Servers