当js中的for循环遇到延时器或者定时器时需要注意的问题(这里有个大坑)

当你在for循环里写if判断,再加延时器或者定时器时,一定要保存当前的i的值,再做处理,否则你拿到的i的值会是for循环里最大的那个;

看demo

for (var i = 0; i < 10; i++) {
			if(i == 5){
				setTimeout(aa,2000);
				function aa(){
					console.log( "i="+i);
				}
			}
		}

你们觉得会打印出i的值是几?

最终结果会是10!

延时器换做定时器,  最终结果也是一样的;

那么为什么呢?

js读取代码是从上向下读取的,当它读取到i满足if语句的时候并不是停止了,还会继续做循环判断;而此时if语句里面是一个延时器,当延时器的延时时间结束要调用aa函数的时候,for循环已经循环结束,而此时的i已经变为10;

所以打印出来i的值就会是10;

那么怎么解决这个问题呢?看代码

var j = null;
		for (var i = 0; i < 10; i++) {
			if(i == 5){
				j = i;
				setTimeout(aa,2000);
				function aa(){
					console.log( "i="+j);
				}
			}
		}

这样打印出来的就是我们想要的结果了,没错就是5;

原理就是当满足if语句时,我们用一个变量把当前i的值保存下来;

时间: 2024-09-22 09:07:07

当js中的for循环遇到延时器或者定时器时需要注意的问题(这里有个大坑)的相关文章

js中switch case循环实例代码

 这篇文章主要介绍了js中switch case循环实例代码,有需要的朋友可以参考一下 代码如下: switch (objNameType) {   case 'PD':   valueUD = obj.id;   id = objName;   var loadVUD = UserData.load(exam, id);   if (loadVUD == null || loadVUD == undefined || loadVUD == '') {   var tmpTGId = obj.i

浅谈js中的in-for循环_javascript技巧

浅谈js中的in-for循环 <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script type="text/javascript" src="jquery.js"></script> </hea

js中的for循环 写法的效率对比

一共三种写法 如下: view sourceprint? for (var i = 0; i < arr.length; i++)   view sourceprint? for (var i in arr)   view sourceprint? for (var i = 0, len = arr.length; i < len; i++)   先看下运行测试的界面: 再看下对应的三个结果,三种写法执行的效率是有很大不同的: 如此看来,执行效率最快的是第三种: view sourceprin

js中switch case循环实例代码_javascript技巧

复制代码 代码如下: switch (objNameType) { case 'PD': valueUD = obj.id; id = objName; var loadVUD = UserData.load(exam, id); if (loadVUD == null || loadVUD == undefined || loadVUD == '') { var tmpTGId = obj.id.substr(0, obj.id.indexOf('_')); qNoTotalD[qIdNoSt

需要解答………~-vb.net访问js中的函数

问题描述 vb.net访问js中的函数 vb.net和百度地图交互时,怎样直接调用avascript中的函数,达到操作百度地图的效果????? 解决方案 通过webbrowser访问 webBrowser1.Document.InvokeScript http://laputaliya.blog.51cto.com/751941/627200/ 解决方案二: VB.net常用函数Vb.net常用函数vb.net常用函数

new- 在js中引入movieClip后 button点击事件里的for循环失效!

问题描述 在js中引入movieClip后 button点击事件里的for循环失效! /** * Created by Administrator on 2015/5/27. */ var stage,image,btn1,btn2; var image_x = 200; var image_y = 20; var step_x; var step_y; var arr_x_r = []; var arr_x_l = []; var arr_y = []; var arry = []; wind

thread-怎么在循环中转换焦点并设置延时

问题描述 怎么在循环中转换焦点并设置延时 课程设计...纸牌游戏 但需要可视化显示 想利用按钮改变背景表示纸牌反面 但现在就直接全部显示反面结果 不知如何在循环的过程中增加延时的一个一个变换 package card;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class GridLayoutDemo extends JFrame { static int Flag = -1; // 定义一个全局变量

javascript for循环-js 中for循环成为死循环

问题描述 js 中for循环成为死循环 下面两个代码,通过 main去循环调用 testfor函数,当main中的i>=6的时候,一直死循环,不断地) alert 出 "i=6 , true" ,刚刚接触JavaScript,请教了~ function testfor(x){ for (i=0;i<5;i++){ alert(i); if(i==x) { return false; } } return true; } function main(){ for (i=3;i

js中怎么循环输出两个table两个table的输出

问题描述 js中怎么循环输出两个table两个table的输出 function searchSpecific(headCount){ //查询每个月具体扣税 $.ajax({ type: 'POST', url: 'personVoid_searchPersons.action', data: { headCount: headCount }, dataType: 'JSON', success: function(data){ var today = new Date(); var year