【问题标题】:how to get exact value in setTimeout function [duplicate]如何在 setTimeout 函数中获取准确值 [重复]
【发布时间】:2013-12-31 13:27:02
【问题描述】:

简单的问题...

for (var i = 0; i < 5; i++) {            
   setTimeout(function () { alert(i) }, 3000);
}

如何用 i 的精确值警告 5 次。

它只给出 5 次“5”。

我需要它的结果 0 1 2 3 4

【问题讨论】:

    标签: javascript jquery html


    【解决方案1】:

    使用closure 将变量的值保持在立即调用函数的新范围内

    for (var i = 0; i < 5; i++) {            
    
       (function(j) {
    
           setTimeout(function () { alert(j) }, 3000);
    
       }(i));
    }
    

    setTimout 是异步的,所以到它执行的时候循环早就完成了,i 的值已经变成5,所以你需要锁定它。

    【讨论】:

      【解决方案2】:

      您可以使用setInterval 替代setTimeout

      试试,

      var xCnt = 0;
      var xInterval = setInterval(function()
                                    {
                                      xCnt +=1;  
                                      alert(xCnt);
      
                                        if(xCnt == 5)
                                          { 
                                             clearInterval(xInterval); 
                                          }
                                    }, 3000);
      

      DEMO

      【讨论】:

      • @downvoter:如果您指定纠正我错误的原因,我将不胜感激。!谢谢。
      猜你喜欢
      • 2019-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-15
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多