当前位置: 首页 > 知识库问答 >
问题:

“设置间隔”内的“for”索引

丁正阳
2023-03-14

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

    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函数中的vari不存在,我可以创建一个varindex和它的存在,但我不理解为什么index存在而vari不存在:

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

当我不使用索引var:

Uncaught TypeError: Cannot read property 'test' of undefined

共有2个答案

房新翰
2023-03-14

无论是否使用索引,您的尝试在这两种情况下都是不正确的。代码中只有一个i变量,当超时触发时,它将具有值数组。长度

这是一个被称为“闭合循环变量”的问题,一种简单的解决方法是:

array.forEach(function (item) {
    item.loop = setInterval(function () {
        item.test("hello");
    }, 1000);
});

这个问题有几个答案可以深入解释您看到的行为的原因,但大多数投票率较高的答案在处理数组时过于复杂forEach是一条路要走。

微生学
2023-03-14
匿名用户

因为您的for循环会立即执行。当你的setInterval()第一次执行时,你的for循环将早已完成,你的i将在数组的范围之外。

在这个例子中,我们的数组长度为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);
}

 类似资料:
  • 我在for循环中有一个set interval函数,当它在set interval函数中时,如果它满足条件,就会发出警报并清除间隔。下面是我的代码,但它不工作。谁能告诉我这里的错误是什么。 谢谢 我试图解决的是:当本地时间与定时器数组中的时间匹配时,我需要每次获得警报(第0列;定时器[计数][0])。数组已经排序

  • 我手头有一个简单的任务:使用折线图或XY图或任何使用bean类型的数据源绘制整数-整数值对。有问题的bean返回X轴和Y轴的长值。人们期望的默认行为是在两个轴上显示1、2、3、4等刻度。 但是不,对于在两台不同计算机上运行的同一应用程序,我得到的值类似于2.5或1E1!好的,这篇旧帖子建议将设置为。现在确实显示了整数,但具有重复值,例如0,0,1,2,2,3,3,3,3,3,4,4等。同一篇文章建

  • 我正在尝试开发一个滑块,如果用户没有点击后退或前进按钮,它每5秒就会改变一次。 但是如果他(用户)这样做了,间隔会触发多次。。。为什么? 我将间隔保存在一个变量中,并清除该变量,因此我不知道为什么这不起作用。。。但是看看你自己: }); 感谢阅读;-)

  • 问题内容: 我正在学习node.js,只是设置了一个空的Linux虚拟机并安装了节点。 我每分钟都在不断运行功能 并考虑根据当前时间添加其他功能。-(例如,如果dateTime =中午星期日,则运行功能) 我的问题是,与传统的cron作业设置相比,运行这样的设置是否有任何缺点? 请记住,无论如何,我必须每分钟在节点中运行一次此功能。 问题答案: 这取决于您必须严格遵守该分钟间隔,以及节点脚本在此期

  • 我只想在进行ajax调用时清除上一个间隔并设置一个新的间隔。 当前代码为: 我尝试了许多推荐的变化,以便能够从函数外部清除间隔。如; 将"间隔"变量设置为null或false, 窗设定间隔, 在setInterval中写入计数函数, 将count函数作为ajax函数之外的单独函数编写, 但这两种变化都没有消除间隔。 稍后,我还需要清除键入的间隔。

  • 有人知道android BLE扫描的间隔和窗口与低延迟、平衡和低功耗扫描模式设置相关联吗? 我发现了这个(如何设置BLE扫描间隔和windows nojust chelse mode在Android中?)所以问题是,如果我在android设备开始扫描后5000ms启动蓝牙设备广告,它会在3000ms内被发现。(这表示5000ms间隔、5000ms窗口不正确?)