时间:2021-05-26
问题
实现异步循环时,你可能会遇到问题。
让我们试着写一个异步方法,一次循环打印一次循环的索引值。
<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
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例为大家分享了js无缝循环滚动实现代码,供大家参考,具体内容如下1、图片格式:260*400.2、使用循环定时器轻松实现无缝滚动.row{width:12
本文实例为大家分享了js流动式时间的实现代码,供大家参考,具体内容如下效果图:实现代码:js流动时间#divH,#divM,#divS{font-family:
本文实例为大家分享了JS面向对象之多选框实现代码,供大家参考,具体内容如下描述:JS面向对象——多选框的实现效果:实现:Utile.js(function(){
本文实例为大家分享了JS面向对象之单选框实现代码,供大家参考,具体内容如下描述:JS面向对象——单选框的实现效果:实现:Utile.js(function(){
复制代码代码如下:分别用marquee和div+js实现首尾相连循环滚动效果用marquee实现首尾相连循环滚动效果(仅IE):这里是要滚动的内容用DIV+ja