Я переменная из цикла 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 внутри циклов - простой практический пример, но я до сих пор не понимаю, почему мой не работает.

0 ответов

Другие вопросы по тегам