Javascript “设置间隔”内的“for”索引
我有一个对象,我把它放在一个数组中,我用for迭代数组,对于数组中的每个对象,我用一个参数设置了一个调用对象方法的间隔,但是我不能。 这是我的课Javascript “设置间隔”内的“for”索引,javascript,for-loop,setinterval,Javascript,For Loop,Setinterval,我有一个对象,我把它放在一个数组中,我用for迭代数组,对于数组中的每个对象,我用一个参数设置了一个调用对象方法的间隔,但是我不能。 这是我的课 function ClassTest() { this.test = function(word) { console.log(word); } } 我创建对象并将其放置在数组中: var array = []; var objectTest = new Clas
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);
}
当我不使用索引变量时,会出现此错误:
因为for循环会立即执行。当您的setInterval第一次执行时,for循环将早已完成,i将超出数组的范围
实例
在本例中,数组的长度为3。当for循环完成时,i变量将等于3。如果我们在setTimeout内记录i,则数字3将在JavaScript控制台中显示三次:
var数组=[1,2,3];
对于var i=0;i<数组长度;i++{
setTimeoutfunction{
console.logi;
}, 1000;
} 因为for循环会立即执行。当您的setInterval第一次执行时,for循环将早已完成,i将超出数组的范围
实例
在本例中,数组的长度为3。当for循环完成时,i变量将等于3。如果我们在setTimeout内记录i,则数字3将在JavaScript控制台中显示三次:
var数组=[1,2,3];
对于var i=0;i<数组长度;i++{
setTimeoutfunction{
console.logi;
}, 1000;
} 无论有无索引,您的尝试在这两种情况下都是不正确的。您的代码中只有一个i变量,当超时触发时,它的值将为array.length 这是一个被称为闭合循环变量的问题,解决该问题的一种干净方法是:
array.forEach(function (item) {
item.loop = setInterval(function () {
item.test("hello");
}, 1000);
});
有几个答案可以深入解释您看到的行为的原因,但大多数投票率较高的答案在处理数组时过于复杂。forEach是一条路。无论有无索引,您的尝试在这两种情况下都是不正确的。您的代码中只有一个i变量,当超时触发时,它的值将为array.length 这是一个被称为闭合循环变量的问题,解决该问题的一种干净方法是:
array.forEach(function (item) {
item.loop = setInterval(function () {
item.test("hello");
}, 1000);
});
有几个答案可以深入解释您看到的行为的原因,但大多数投票率较高的答案在处理数组时过于复杂。forEach是一种方法。执行setInterval回调时,i等于array.length。例如,看看如何解决这个问题。你能分享一下首先出现的错误吗。或者我不存在。当您执行setInterval的回调时,我等于array.length。例如,看看如何解决这个问题。你能分享一下首先出现的错误吗。或者只是我不存在。但是,如果您需要支持IE 8,则Array.prototype.forEach不可用。@Phylogenesis如果您需要支持IE 8,则可以使用。但是,如果您需要支持IE 8,则Array.prototype.forEach不可用。@Phylogenesis如果您需要支持IE 8,则可以使用。
array.forEach(function (item) {
item.loop = setInterval(function () {
item.test("hello");
}, 1000);
});