Ich habe eine Reihe von Elementen, es ist bestückt, aber alle Mitglieder sind undefined
.Mitglied des Arrays ist undefined, hat alle Daten, um das Mitglied
// 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);
}
Es funktioniert ohne Timeout:
for(var i = 0 ; i < myArray.length; i++) {
// No errors -> it works
myArray[i].classList.add('yeah');
}
myArray
ist ein globaler Wert und Timeout hat Zugriff auf alle Daten, die er braucht. Warum ist es immer noch undefiniert?
Der Wert der Variablen "i" ist nach dem letzten Element, wenn diese Funktionen tatsächlich ausgeführt werden. Ihre 'for'-Schleife wird beendet, bevor sie ausgeführt wird! Wie Sie gesehen haben sollten, ist der Wert von "i" in Ihrer Ausgabe immer 4, was der Wert nach dem Schleifenabschluss ist. –