Javascript JS:正在尝试将setTimeout与增量值一起使用
我正在尝试在函数调用中使用增量ID在循环上设置一些延迟,以及增量地设置更大的延迟时间。我设置的是这样的:Javascript JS:正在尝试将setTimeout与增量值一起使用,javascript,delay,settimeout,intervals,Javascript,Delay,Settimeout,Intervals,我正在尝试在函数调用中使用增量ID在循环上设置一些延迟,以及增量地设置更大的延迟时间。我设置的是这样的: var delay = 0; var delayMilliseconds = 250; timeOutArray = []; for(var i=0; i<100; i++){ delay = i*delayMilliseconds; timeOutArray[i] = setTimeout(function(){ loadRoute(mod
var delay = 0;
var delayMilliseconds = 250;
timeOutArray = [];
for(var i=0; i<100; i++){
delay = i*delayMilliseconds;
timeOutArray[i] = setTimeout(function(){
loadRoute(modelsArray[i], (i+1));
},delay);
}
我遇到的问题是,在调用任何loadRoute函数时,被引用的I已经增加到99
我正在寻找一种方法,让它在设置超时时识别I的数量,而不是在超时发生时识别I的数量
我发现这篇文章是关于使用承诺的,但有点让人困惑。
有人能告诉我如何在这些调用中实现承诺,或者任何不需要将setTimeout代码全部包装在eval中就能实现承诺的方法吗?将其保存在闭包中以保留原始值
timeOutArray[i] = setTimeout( (function(i) { return function(){
loadRoute(modelsArray[i], (i+1));
}) (i),delay);
基本上,您在每个循环迭代中创建并执行一个新的匿名函数,并将当前i的副本传递给它。执行时,此函数返回另一个匿名函数,然后将其传递给setTimeout。但是,此函数保留对创建它的作用域的引用,因此可以将i视为外部匿名函数保存的
这有点棘手。您可以在JavaScript中搜索闭包。或者在for循环之外定义超时函数并调用该函数:
var delay = 0;
var delayMilliseconds = 250;
function doTimeoutStuff(i, delay) {
setTimeout(function () {
loadRoute(modelsArray[i], (i+1));
}, delay);
}
for (var i=0; i<5; i++) {
delay = i*delayMilliseconds;
doTimeoutStuff(i, delay);
}
这是代码的工作示例。问题在于对范围和结束的误解 在每次迭代中使用上述函数为每次迭代创建了一个新的范围,这使我们的超时函数有机会为每次迭代关闭一个新的范围,其中有一个变量,其中包含正确的每次迭代值供我们访问
setTimeout不创建闭包,而是允许您在执行时将要传递给回调函数的变量传递给回调函数,然后回调函数将在回调过程中一直存在 setTimeoutfunction[,delay,arg1,arg2,…]
来源:谢谢你的帮助。实际上,我在这一行代码中得到了一个语法错误:}I,delay;语法错误:缺少;在陈述之前,非常感谢。这在代码的现有上下文中解决了我的问题。另外,很高兴知道我需要研究范围和结束。如果它有帮助,那么请接受答案,它可能会帮助其他用户。
var delay = 0;
var delayMilliseconds = 250;
timeOutArray = [];
for (var i=1; i<100; i++) {
(function(j){
delay = j*delayMilliseconds;
timeOutArray[j] = setTimeout(function(){
console.log(j)
//loadRoute(modelsArray[j], (j+1));
},delay);
})( i );
}
(function(j){
//this part of the code create new scope
})( i );