javascript - 无法通过 setTimeout 调用函数

标签 javascript jquery asp.net function var

我正在尝试让几个函数依次运行,并且它们之间的等待时间为 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/

相关文章:

javascript - 如何在插件配置期间访问 $(this) 元素以使用 jQuery 获取 data() 属性?

c# - 当反射类型本身是 List 时实例化通用 c# List

c# - “DropDownList1”具有无效的 SelectedValue,因为它不存在于项目列表中。参数名称 : value

c# - 如何使用 C# 隐藏和显示 html 模板表?

javascript - 如何用kineticjs制作橡皮擦

javascript - 在网络浏览器上显示 html 页码

javascript - 扩展建议 : Moving block wont work in Javascript

javascript - 在 PHP 循环中加入最近的数据库行

javascript - 结合 2 个日期选择器条件

javascript - 单击除一个元素之外的所有内容时执行事件?