我正在尝试让几个函数依次运行,并且它们之间的等待时间为 1.5 秒。
现在,当我尝试使用相同的 Id 执行此操作时(在“NoteList(>here<)”内,如 1、2、3 或任何其他,它可以工作;
for (var i = 0; i < 36; i++)
{
setTimeout(function () { OnClcRandom(NoteList[0]) }, i * 1000 + 1000);
}
但是!当我尝试使用 var i 这样做时,它不起作用并且页面中的所有功能都卡住了。知道为什么吗?
for (var i = 0; i < 36; i++)
{
setTimeout(function () { OnClcRandom(NoteList[i]) }, i * 1000 + 1000);
}
最佳答案
这是因为所有函数都引用同一个live i
变量,而不是您调用 setTimeout() 时变量的值
。这意味着当您的函数实际运行时,超时 i
将是 36
。
试试这个:
for (var i = 0; i < 36; i++) {
(function(x){
setTimeout(function () { OnClcRandom(NoteList[x]) }, i * 1000 + 1000);
)(i);
}
这会在循环的每次迭代中执行一个匿名函数,每次执行都会获得自己的 x
参数以在原始函数中使用。
关于javascript - 无法通过 setTimeout 调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15850667/