javascript - setInterval - 如何保留传入的变量

标签 javascript setinterval

我在 SO 上做了一些挖掘,但找不到我想要实现的确切目标。

简单来说,我有一个类似的功能

function(){
   for(i=0;i<10;i++){
      setInterval(function(){ alert(i);), 1000)
   }
}

我期望的是 10 个 setIntervals,它会每 1 秒提醒 1 到 10,发生的事情是它会一直提醒 10,因为在 for 循环结束时 'i' 是 10。如何将“i”传递给 setInterval 匿名函数,以便我可以在 setInterval 中保留 i 的值?

以上是我实际问题的简化版本。我实际上正在尝试这样做 var 定时器 = [];

function(obj){
   //Clear any intervals
   for(i=0;i<timer.length;i++){
      clearInterval(timers[i]);
   }

   // Empty timers Array
   timers = [];

   for(i in obj){
      //My object from the dom. This guy is what I am trying to preserve
      my_obj = document.getElementById(i);
      if(obj[i] === "Something"){
         timers.push(setInterval(function(){
            my_obj.replace_class(["Something", "Otherthing"],"Something");
         }, 1000)
      }
   }
}

上面代码中的my_obj总是引用obj中的id = last 'i'。

我说的有道理吗?

最佳答案

这应该可以解决问题;)

for(i = 1; i < 11; i++){
  (function(local_i){ 
    setInterval(function(){ console.log(local_i); }, 1000 * local_i)
  })(i);
}

关于javascript - setInterval - 如何保留传入的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20844788/

相关文章:

javascript - 使用 Mustache 仅显示列表中的第一项

javascript - JavaScript 中 0 毫秒的 setInterval() 行为

javascript - If 语句未在 setInterval 内运行

javascript - 在一段时间内平滑地增加数字

php - setInterval,ajax请求

javascript - 在 JavaScript 游戏中使用 setInterval 代替 requestAnimationFrame

javascript - 如何以最少的步骤验证数组是否存在及其长度?

javascript - Selenium2 WebDriver executeScript 是否在 window.onload 之后运行?

javascript - 为什么 NodeJS 对大数加法不准确?

javascript - 我的幻灯片放映逻辑中的代码块在页面加载时不运行