Я переменная из цикла for не работает в функции setTimeout
У меня проблема со следующим кодом:
for (var i = 0; i < balls.length; i++) {
balls[i].display();
balls[i].move();
for (var j = 0; j < balls.length; j++) {
if (i != j && balls[i].collide(balls[j])) {
if (balls[i].makeNewBall == true && balls[j].makeNewBall == true) {
balls.push(new bold());
balls[i].makeNewBall = false;
balls[j].makeNewBall = false;
console.log("if statement works!");
setTimeout(function() {balls[i].makeNewBall = true; console.log("ball i works");},1000)
setTimeout(function() {balls[j].makeNewBall = true; console.log("ball j works");},1000)
}
}
}
}
Прежде всего, немного предыстории:
Я сделал код, который проверяет столкновение двух шаров. Если два шара сталкиваются, он добавит новый шар в массив, а также установит для переменной значение false. Переменная находится в месте, чтобы работать как форма перезарядки, чтобы она не порождала новые шары, пока они сталкиваются. Переменная - "makeNewBall", и она должна быть истинной для создания нового шара. После создания нового шарика эта переменная становится ложной. После этого я сделал функцию setTimeout, которая через 1 секунду устанавливает это значение в истинное усиление.
Эта проблема:
Когда я использую переменные "i" и "j" в качестве номеров массивов, в двух функциях setTimeout появляется "Uncaught TypeError: Невозможно установить свойство 'makeNewBall' из неопределенного". Если я вместо "i" и "j" введу числовые значения, это будет работать нормально, но только для шаров, имеющих эти цифры, очевидно
Так почему я не могу использовать "i" и "j" из цикла for в функции setTimeout? Обе функции находятся в том же цикле for, что и некоторые другие коды, но другой код все еще может использовать i и j. Разве функции setTimeout не должны по-прежнему иметь доступ к одним и тем же переменным, поскольку они находятся в одинаковых циклах for? Я прочитал закрытие JavaScript внутри циклов - простой практический пример, но я до сих пор не понимаю, почему мой не работает.