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插件tipswindown与hintbox冲突
Nov 05 Javascript
document.forms用法示例介绍
Jun 26 Javascript
jquery实现很酷的网页顶部图标下拉菜单效果
Aug 22 Javascript
jQuery自定义图片缩放拖拽插件imageQ实现方法(附demo源码下载)
May 27 Javascript
JavaScript实现横线提示输入验证码随输入验证码输入消失的方法
Sep 24 Javascript
jQuery使用正则验证15/18身份证的方法示例
Apr 27 jQuery
js封装成插件_Canvas统计图插件编写实例
Sep 12 Javascript
vue.js todolist实现代码
Oct 29 Javascript
Vue 事件处理操作实例详解
Mar 05 Javascript
微信小程序--特定区域滚动到顶部时固定的方法
Apr 28 Javascript
layer弹出层显示在top顶层的方法
Sep 11 Javascript
JavaScript数组排序小程序实现解析
Jan 13 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微信公众号开发之图片回复
2018/10/20 PHP
js 禁止选择功能实现代码(兼容IE/Firefox)
2010/04/23 Javascript
AJAX异步从优酷专辑中采集所有视频及信息(JavaScript代码)
2010/11/20 Javascript
如何判断Javascript对象是否存在的简单实例
2016/05/18 Javascript
浅谈js常用内置方法和对象
2016/09/24 Javascript
javascript 判断是否是微信浏览器的方法
2016/10/09 Javascript
EditPlus中的正则表达式 实战(2)
2016/12/15 Javascript
bootstrap实现每隔5秒自动轮播效果
2016/12/20 Javascript
JS组件系列之JS组件封装过程详解
2017/04/28 Javascript
label+input实现按钮开关切换效果的实例
2017/08/16 Javascript
JS解决position:sticky的兼容性问题的方法
2017/10/17 Javascript
AngularJS实现的2048小游戏功能【附源码下载】
2018/01/03 Javascript
Less 安装及基本用法
2018/05/05 Javascript
小程序实现列表删除功能
2018/10/30 Javascript
vue使用laydate时间插件的方法
2018/11/14 Javascript
Vue实现搜索结果高亮显示关键字
2019/05/28 Javascript
js实现购物车商品数量加减
2020/09/21 Javascript
通过滑动翻页效果实现和移动端click事件问题
2021/01/26 Javascript
从零学python系列之数据处理编程实例(一)
2014/05/22 Python
Python程序设计入门(4)模块和包
2014/06/16 Python
C#返回当前系统所有可用驱动器符号的方法
2015/04/18 Python
在Python中操作文件之read()方法的使用教程
2015/05/24 Python
Python实现求解括号匹配问题的方法
2018/04/17 Python
python3实现小球转动抽奖小游戏
2020/04/15 Python
解决pyinstaller打包发布后的exe文件打开控制台闪退的问题
2019/06/21 Python
解决python tkinter界面卡死的问题
2019/07/17 Python
Python+PyQt5+MySQL实现天气管理系统
2020/06/16 Python
pip install命令安装扩展库整理
2021/03/02 Python
探究 canvas 绘图中撤销(undo)功能的实现方式详解
2018/05/17 HTML / CSS
BIBLOO捷克:购买女装、男装、童装、鞋和配件
2017/01/27 全球购物
物业管理应届生求职信
2013/10/28 职场文书
服装公司总经理岗位职责
2013/11/30 职场文书
幼儿园家长评语
2014/02/10 职场文书
《匆匆》教学反思
2014/02/22 职场文书
医学生就业推荐表自我鉴定
2014/03/26 职场文书
心理健康活动总结
2014/04/30 职场文书