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学习笔记之Helloworld
Dec 22 Javascript
js限制checkbox选中个数以限制六个为例
Jul 15 Javascript
详解AngularJS 模态对话框
Apr 07 Javascript
js只执行1次的函数示例
Jul 20 Javascript
关于JS Lodop打印插件打印Bootstrap样式错乱问题的解决方案
Dec 23 Javascript
angularjs实现的前端分页控件示例
Feb 10 Javascript
最全的JavaScript开发工具列表 总有一款适合你
Jun 29 Javascript
利用JS如何计算字符串所占字节数示例代码
Sep 13 Javascript
JavaScript数据结构之优先队列与循环队列实例详解
Oct 27 Javascript
vue项目打包之开发环境和部署环境的实现
Apr 23 Javascript
深入分析JavaScript 事件循环(Event Loop)
Jun 19 Javascript
ant design vue中日期选择框混合时间选择器的用法说明
Oct 27 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+Tidy-完美的XHTML纠错+过滤
2007/04/10 PHP
php使用pdo连接并查询sql数据库的方法
2014/12/24 PHP
详解PHP处理字符串类似indexof的方法函数
2017/06/11 PHP
YII2框架中查询生成器Query()的使用方法示例
2020/03/18 PHP
Centos7.7 64位利用本地完整安装包安装lnmp/lamp套件教程
2021/03/09 Servers
Javascript 同时提交多个Web表单的方法
2009/02/19 Javascript
JS 页面自动加载函数(兼容多浏览器)
2009/05/18 Javascript
限制文本框输入N个字符的js代码
2010/05/13 Javascript
jQuery的写法不同导致的兼容性问题的解决方法
2010/07/29 Javascript
使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
2010/12/30 Javascript
利用JQuery动画制作滑动菜单项效果实现步骤及代码
2013/02/07 Javascript
基于jquery插件实现常见的幻灯片效果
2013/11/01 Javascript
js判断设备是否为PC并调整图片大小
2014/02/12 Javascript
jquery判断浏览器后退时候弹出消息的方法
2014/08/11 Javascript
javascript实现保留两位小数的多种方法
2015/12/18 Javascript
Vue.js学习之过滤器详解
2017/01/22 Javascript
jQuery为DOM动态追加事件的方法
2017/02/16 Javascript
JavaScript去掉数组重复项的方法分析【测试可用】
2018/07/19 Javascript
通过实例学习React中事件节流防抖
2019/06/17 Javascript
vue路由跳转传递参数的方式总结
2020/05/10 Javascript
javascript实现简单留言板案例
2021/02/09 Javascript
在Linux命令行终端中使用python的简单方法(推荐)
2017/01/23 Python
python读写csv文件方法详细总结
2019/07/05 Python
浅谈django url请求与数据库连接池的共享问题
2019/08/29 Python
python使用协程实现并发操作的方法详解
2019/12/27 Python
python 删除系统中的文件(按时间,大小,扩展名)
2020/11/19 Python
How TDD works
2012/09/30 面试题
房屋改造计划书
2014/01/10 职场文书
关于打架的检讨书
2014/01/17 职场文书
银行转正自我鉴定
2014/09/29 职场文书
2014年销售部工作总结
2014/12/01 职场文书
小学教师岗位职责
2015/04/02 职场文书
学术会议通知范文
2015/04/15 职场文书
银行催款通知书
2015/04/17 职场文书
MySQL单表千万级数据处理的思路分享
2021/06/05 MySQL
基于Redis结合SpringBoot的秒杀案例详解
2021/10/05 Redis