我有一个对象,我把它放在一个数组中,然后我用 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/