Javascript 数组的成员未定义,具有获取该成员的所有数据
我有一个元素数组,它已填充,但所有成员都未定义Javascript 数组的成员未定义,具有获取该成员的所有数据,javascript,Javascript,我有一个元素数组,它已填充,但所有成员都未定义 // Result: [div.some-class, div.some-class, div.some-class, div.some-class] console.log(myArray); // Result: 4 console.log(myArray.length); for(var i = 0 ; i < myArray.length; i++) { setTimeout(function() { c
// Result: [div.some-class, div.some-class, div.some-class, div.some-class]
console.log(myArray);
// Result: 4
console.log(myArray.length);
for(var i = 0 ; i < myArray.length; i++) {
setTimeout(function() {
console.log(myArray[i]); // <- This is "undefined"
console.log(myArray); // <- Successful log: has access to array
console.log(i); // <- Successful log: has access to "i"
// Uncaught TypeError: Cannot read property 'classList' of undefined
myArray[i].classList.add('yeah');
}, i * 200);
}
//结果:[div.some-class,div.some-class,div.some-class,div.some-class]
log(myArray);
//结果:4
log(myArray.length);
对于(var i=0;i log(myArray[i]);//当超时调用函数时,循环已经结束,这意味着i
等于4
这里有一个简单的解决方法:
for(var i = 0 ; i < myArray.length; i++) {
(function(i) {
setTimeout(function(i) {
myArray[i].classList.add('yeah');
}, i * 200)
})(i);
}
for(var i=0;i
您只需对每个i
调用超时,并将该i
传递给函数变量i
的值超过这些函数实际运行时的最后一个元素。您的for
循环在它们开始运行之前完成!正如您应该看到的那样,i
的值在输出中始终是4,这是是循环完成后的值。某个地方缺少一个)
,我无法找到正确的位置:-Dyup。添加了缺少的)
之前已经尝试过,但仍然在)(I)中获得错误;
区域。错误:设置超时(…)不是函数
将其包装在函数中最简单的解决方案是将var
更改为let
。
for(var i = 0 ; i < myArray.length; i++) {
(function(i) {
setTimeout(function(i) {
myArray[i].classList.add('yeah');
}, i * 200)
})(i);
}