javascript - "for"内部 "setInterval"的索引

标签 javascript for-loop setinterval

我有一个对象,我把它放在一个数组中,然后我用 for 迭代数组,对于数组中的每个对象,我设置了一个调用对象方法的间隔一个参数,但我不能。 这是我的“类”。

    function ClassTest() {
        this.test = function(word) {
            console.log(word);
        }
    }

我创建对象并将其放在数组中:

    var array = [];
    var objectTest = new ClassTest();


    array.push(objectTest);

当我设置间隔时:

    for(var i = 0; i < array.length; i++) {
        array[i].loop = setInterval(function() {
            array[i].test("hello")
        }, 1000);
    }

问题是 setInterval 函数中的 var i 不存在,我可以创建一个 var index 并且它存在但我不明白为什么 index 存在而 var i 不存在。:

    for(var i = 0; i < array.length; i++) {
        var index = i;
        array[i].loop = setInterval(function() {
            array[index].test("hello")
        }, 1000);
    }

当我不使用 index var 时出现此错误:

Uncaught TypeError: Cannot read property 'test' of undefined

最佳答案

因为您的 for 循环会立即执行。当您的 setInterval() 第一次执行时,您的 for 循环早就结束了,您的 i 将在数组的范围。

例子

在这个例子中,我们的数组有一个length为3。当我们的for循环结束时,我们的i 变量将等于 3。如果我们在 setTimeout 内记录 i,数字 3 将在我们的 JavaScript 控制台中显示三次:

var array = [1, 2, 3];

for (var i = 0; i < array.length; i++) {
  setTimeout(function() {
    console.log(i);
  }, 1000);
}

关于javascript - "for"内部 "setInterval"的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29410503/

相关文章:

javascript - AngularJs DatePicker 不显示 View

javascript - 单击按钮时从数组中交换图像

java - java中的for循环异常行为

java - 莫尔斯电码翻译器 - 似乎无法准确地从莫尔斯电码转换为英语

javascript - 运行用户脚本时 setInterval 使我的浏览器崩溃?

javascript - 重新分配新选项卡后如何更新导航栏?

javascript - 使用 Quill.js 在光标位置插入文本

java - 如何在Java中选中不同的单选按钮时显示不同的消息?

javascript - Node 服务器上的多个 setInterval 计时器

javascript - setInterval 似乎不起作用?