В программе Javascript у меня есть объект со следующими двумя (упрощенными) функциями:
this.do_A = function() {
var nothing_changed = false;
while (!nothing_changed) {
nothing_changed = true;
for (var column=0; column<this.columns; column++) {
for (var row=0; row<this.rows; row++) {
nothing_changed = nothing_changed && this.do_B(row, column);
}
}
}
}
this.do_B = function(row, column) {
nothing_changed = true;
if (this[row][column] == null) {
nothing_changed = false;
}
return nothing_changed;
}
При запуске этого кода происходит что-то очень странное, когда do_B возвращает false, и, следовательно, nothing_changed становится false - при достижении снова
for (var row=0; row<this.rows; row++)
, переменная row
становится немедленно this.rows
, и, следовательно, внутренний цикл завершается. Более того, это происходит в последующих циклах внешних циклов - row
инициализируется как 0
, затем сразу становится this.rows
и внутренний цикл снова заканчивается.
У меня нет причины, что может вызвать это. Я попытался максимально упростить функции, и это продолжается.