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的实现回车键Enter切换焦点
Sep 14 Javascript
js 可拖动列表实现代码
Dec 13 Javascript
JS操作Cookies包括(读取添加与删除)
Dec 26 Javascript
jQuery异步验证用户名是否存在示例代码
May 21 Javascript
浅谈JavaScript中null和undefined
Jul 09 Javascript
基于jquery实现弹幕效果
Sep 29 Javascript
JS实现PC手机端和嵌入式滑动拼图验证码三种效果
Feb 15 Javascript
微信小程序 页面跳转传值实现代码
Jul 27 Javascript
在小程序/mpvue中使用flyio发起网络请求的方法
Sep 13 Javascript
Vue + Element UI图片上传控件使用详解
Aug 20 Javascript
详解Typescript 内置的模块导入兼容方式
May 31 Javascript
微信小程序连接服务器展示MQTT数据信息的实现
Jul 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
40年前的这部特摄片恐龙特级克塞号80后的共同回忆
2020/03/08 日漫
file_get_contents获取不到网页内容的解决方法
2013/03/07 PHP
PHP临时文件的安全性分析
2014/07/04 PHP
WordPress主题制作之模板文件的引入方法
2015/12/28 PHP
CI框架中数据库操作函数$this-&gt;db-&gt;where()相关用法总结
2016/05/17 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
2017/09/16 PHP
PHP中的浅复制与深复制的实例详解
2017/10/26 PHP
Centos7 Yum安装PHP7.2流程教程详解
2019/07/02 PHP
jQuery 遍历json数组的实现代码
2020/09/22 Javascript
javascript浏览器兼容教程之事件处理
2014/06/09 Javascript
IE浏览器不支持getElementsByClassName的解决方法
2014/08/27 Javascript
使用AngularJS来实现HTML页面嵌套的方法
2015/06/17 Javascript
jQuery实现类似淘宝网图片放大效果的方法
2015/07/08 Javascript
详解AngularJs路由之Ui-router-resolve(预加载)
2017/06/13 Javascript
vue学习之mintui picker选择器实现省市二级联动示例
2017/10/12 Javascript
vue初尝试--项目结构(推荐)
2018/01/30 Javascript
vue项目中实现图片预览的公用组件功能
2018/10/26 Javascript
浅谈express.js框架中间件(middleware)
2019/04/07 Javascript
vue cli3 配置proxy代理无效的解决
2019/10/30 Javascript
微信小程序实现同时上传多张图片
2020/02/03 Javascript
vuex的使用和简易实现
2021/01/07 Vue.js
python里大整数相乘相关技巧指南
2014/09/12 Python
python中模块查找的原理与方法详解
2017/08/11 Python
Python Threading 线程/互斥锁/死锁/GIL锁
2019/07/21 Python
Python根据URL地址下载文件并保存至对应目录的实现
2020/11/15 Python
AmazeUI 面板的实现示例
2020/08/17 HTML / CSS
联想哥伦比亚网上商城:Lenovo Colombia
2017/01/10 全球购物
移动通信专业自荐信范文
2013/11/12 职场文书
运动会通讯稿100字
2014/01/31 职场文书
个人现实表现材料
2014/02/04 职场文书
老人节标语大全
2014/10/08 职场文书
英语导游词
2015/02/13 职场文书
污水处理保证书
2015/05/09 职场文书
求职自荐信该如何书写?
2019/06/24 职场文书
Angular性能优化之第三方组件和懒加载技术
2021/05/10 Javascript
java executor包参数处理功能 
2022/02/15 Java/Android