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 相关文章推荐
你的编程语言可以这样做吗?
Sep 07 Javascript
jquery 检测元素是否存在的实例代码
Nov 19 Javascript
Jquery操作radio的简单实例
Jan 06 Javascript
jQuery.Callbacks()回调函数队列用法详解
Jun 14 Javascript
实用jquery操作表单元素的简单代码
Jul 04 Javascript
JS监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
Aug 05 Javascript
学习JavaScript图片预加载模块
Nov 07 Javascript
node.js Sequelize实现单实例字段或批量自增、自减
Dec 08 Javascript
jQuery实现二维码扫描功能
Jan 09 Javascript
vue-cli项目中使用公用的提示弹层tips或加载loading组件实例详解
May 28 Javascript
vue form 表单提交后刷新页面的方法
Sep 04 Javascript
怎么理解wx.navigateTo的events参数使用详情
May 18 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
php4的session功能评述(三)
2006/10/09 PHP
PHP图片处理类 phpThumb参数用法介绍
2012/03/11 PHP
WIN8.1下搭建PHP5.6环境
2015/04/29 PHP
Laravel 修改默认日志文件名称和位置的例子
2019/10/17 PHP
一页面多XMLHttpRequest对象
2007/01/22 Javascript
网页禁用右键实现代码(JavaScript代码)
2009/10/29 Javascript
cnblogs中在闪存中屏蔽某人的实现代码
2010/11/14 Javascript
Javascript代码实现仿实例化类
2015/04/03 Javascript
【JS+CSS3】实现带预览图幻灯片效果的示例代码
2016/03/17 Javascript
JavaScript知识点总结(十六)之Javascript闭包(Closure)代码详解
2016/05/31 Javascript
使用Ajax与服务器(JSON)通信实例
2016/11/04 Javascript
Bootstrap Scrollspy源码学习
2017/03/02 Javascript
js获取json中key所对应的value值的简单方法
2020/06/17 Javascript
Angular.JS去掉访问路径URL中的#号详解
2017/03/30 Javascript
JavaScript实现音乐自动切换和轮播
2017/11/05 Javascript
Angular使用cli生成自定义文件、组件的方法
2018/09/04 Javascript
优雅的在React项目中使用Redux的方法
2018/11/10 Javascript
详解如何解决vue开发请求数据跨域的问题(基于浏览器的配置解决)
2018/11/12 Javascript
详解Vue3 Composition API中的提取和重用逻辑
2020/04/29 Javascript
原生微信小程序开发中 redux 的使用详解
2021/02/18 Javascript
解决await在forEach中不起作用的问题
2021/02/25 Javascript
[03:04]DOTA2英雄基础教程 影魔
2013/12/11 DOTA
Python爬虫框架Scrapy安装使用步骤
2014/04/01 Python
10种检测Python程序运行时间、CPU和内存占用的方法
2015/04/01 Python
Django中cookie的基本使用方法示例
2018/02/03 Python
Python实现的企业粉丝抽奖功能示例
2019/07/26 Python
python3 中使用urllib问题以及urllib详解
2020/08/03 Python
Python LMDB库的使用示例
2021/02/14 Python
详解CSS3开启硬件加速的使用和坑
2017/08/21 HTML / CSS
KIKO比利时官网:意大利彩妆品牌
2017/07/23 全球购物
捐款倡议书格式范文
2014/05/14 职场文书
2014年培训工作总结范文
2014/11/27 职场文书
孔庙导游词
2015/02/04 职场文书
酒店总经理岗位职责
2015/04/01 职场文书
通知怎么写?
2019/04/17 职场文书
PySwarms(Python粒子群优化工具包)的使用:GlobalBestPSO例子解析
2021/04/05 Python