Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 数组的成员未定义,具有获取该成员的所有数据_Javascript - Fatal编程技术网

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;ilog(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);
}