Javascript 如何保存/清除setTimeout';使用循环';s指数?

Javascript 如何保存/清除setTimeout';使用循环';s指数?,javascript,arrays,loops,closures,settimeout,Javascript,Arrays,Loops,Closures,Settimeout,我多次调用for循环。我想为每个索引保存一个setTimeout。其思想是使用循环的索引作为setTimeout的数组索引,但是setTimeout返回一个增量ID号,我想重置它,或者重写以控制返回的ID,这样我就可以用给定的索引标识每个超时,始终在循环的索引范围内反复执行。能够在以后对特定索引使用clearTimeout var超时=[]; 对于(变量i=0;i超过索引, //我想通过ID或索引覆盖位置。 }(延迟、超时、i)); ... } 当循环执行多次时,超时[i]值超过循环索引的值:

我多次调用for循环。我想为每个索引保存一个setTimeout。其思想是使用循环的索引作为setTimeout的数组索引,但是setTimeout返回一个增量ID号,我想重置它,或者重写以控制返回的ID,这样我就可以用给定的索引标识每个超时,始终在循环的索引范围内反复执行。能够在以后对特定索引使用clearTimeout

var超时=[];
对于(变量i=0;i<5;i++){
...
(功能(延迟、超时、i){
//保留超时的引用,以便稍后清除。
超时[i]=设置超时(函数(){
countInView--;
},延误);
日志(“i:+5+”|超时:+timeout[i]);
//i:5 |超时:25->超过索引,
//我想通过ID或索引覆盖位置。
}(延迟、超时、i));
...
}
  • 当循环执行多次时,
    超时[i]
    值超过循环索引的值:

  • 我只想清除代码其他部分的超时,但是当到达代码的这一部分时,
    timeouts[I]
    的值可能是140,循环
    I
    的值只有3,因此我永远无法清除要保存的第三个(或任何)setTimeout:

    clearTimeout(超时[i]);
    

  • 您可以为此使用二维数组,第一个维度将随for循环索引一起更改,而第二个维度可以保持在0中,以控制每个迭代分配的超时ID

    用于在循环的索引中保存setTimeout
    var超时=[];//二维阵列
    对于(i=0;i<5;i++)
    超时[i]=[];
    对于(变量i=0;i<5;i++){
    ...
    (函数(延迟,$element,savedtimeout){
    savedtimeout[0]=设置超时(函数(){
    countInView--;
    },延迟,保存超时);
    }(延迟,$element,超时[i]);
    ...
    }
    
    循环中索引内的clear setTimeout
    if(超时[i][0]!=null){
    //从队列中删除超时
    clearTimeout(超时[i][0]);
    }
    
    您可以为此使用二维数组,第一个维度将随着for循环索引的变化而变化,而第二个维度可以保持在0中,以控制分配给每个迭代的超时ID

    用于在循环的索引中保存setTimeout
    var超时=[];//二维阵列
    对于(i=0;i<5;i++)
    超时[i]=[];
    对于(变量i=0;i<5;i++){
    ...
    (函数(延迟,$element,savedtimeout){
    savedtimeout[0]=设置超时(函数(){
    countInView--;
    },延迟,保存超时);
    }(延迟,$element,超时[i]);
    ...
    }
    
    循环中索引内的clear setTimeout
    if(超时[i][0]!=null){
    //从队列中删除超时
    clearTimeout(超时[i][0]);
    }
    

    如果只选中
    setTimeout()
    doc,您将看到它返回超时的整数ID,可与
    cleartimout(intID)
    一起使用。。。现在改用相关的数组方法:
    timeouts.push(setTimeout(…)。但我不确定你是否希望删除任何特定的超时,如果是,取决于什么?!。。。谢谢你的提示,除了w3c,我已经阅读了很多参考资料。是的,我想按索引删除,(在视口中不再可见的索引)@Roizpi:你可以使用二维数组,第一个维度会随着每次执行lopp的tim而改变,第二个维度会在你的循环中改变。例如,超时[0][4]将是第五次迭代的第一个for循环,超时[3][2]将是for循环的第四次执行,也是第二次执行iteration@A@P我重新制定了我的问题。感谢您提供的所有信息,我正在处理二维解决方案。如果您只需选中
    setTimeout()
    doc,您将看到它返回超时的整数ID,可与
    cleartimout(intID)
    一起使用。。。现在改用相关的数组方法:
    timeouts.push(setTimeout(…)。但我不确定你是否希望删除任何特定的超时,如果是,取决于什么?!。。。谢谢你的提示,除了w3c,我已经阅读了很多参考资料。是的,我想按索引删除,(在视口中不再可见的索引)@Roizpi:你可以使用二维数组,第一个维度会随着每次执行lopp的tim而改变,第二个维度会在你的循环中改变。例如,超时[0][4]将是第五次迭代的第一个for循环,超时[3][2]将是for循环的第四次执行,也是第二次执行iteration@A@P我重新制定了我的问题。谢谢你提供的所有信息,我正在处理二维解。谢谢,就像我迄今为止看到的所有使用这个的例子一样。但我从未见过有人用给定的索引删除它。我想清除setTimeout数组中的特定位置,而不是使用pop()或shift()。@Roizpi:在我为超时维护二维数组的情况下,这种更新方法对您有帮助吗…@Roizpi:有用吗???@Roizpi:然后您可以清除超时(超时[0][0])//因此它将清除first的第一个超时iteration@Pa如果第一次循环执行,我只触发3个延迟动作,延迟1分钟,第二次循环执行,我想删除2个,我已经在第二维度(或者可能是第三维度),我将无法删除过去的设置超时,但我也将为相同的迭代创建第二个超时。我只想在每次迭代中保存一个setTimeout,在本例中,我试图保存5个,但在以后的迭代中,如果出现条件,我希望能够清除以前保存的相同索引。如果我误解了,很抱歉,(您仍然没有使用push)。谢谢,就像我迄今为止看到的所有使用此功能的示例一样。但我从未见过有人用给定的索引删除它。我想去