@sdgroup14

Почему утечка памяти в цикле и почему такое происходит?

const array = [];
const step = 0.1;
do {
    const item = array[array.length - 1] ? array[array.length - 1] : 0;
    array.push(item + step);
} while (+array[array.length - 1] !== 100);
  • Вопрос задан
  • 223 просмотра
Решения вопроса 1
@Karpion
Память расходуется в операторе array.push(item + step); - это потому, что Вы так написали. Я не знаю, как это ещё объяснить. И не знаю, зачем Вы это делаете.

Вам верно указали, что условие завершения цикла while (+array[array.length - 1] !== 100); может не выполниться, причём в любом языке на любой платформе (а где-то - может выполняться). В данном случае (JS) оно не выполняется (на любой аппаратуре, у JS это стандарт на работу с float-числами).

Я советую заменить условие "не равно" на "строго меньше" - мне кажется, получится то что надо.
Либо можно запустить цикл по счётчику, вычислив заранее число повторений.

И ещё совет: Если цикл ведёт себя неправильно, то вставьте внутрь отладочную печать изменяемых в нём переменных - например, array.length и item
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@abberati
frontend-разработчик
Тут нет утечки памяти. Это бесконечный цикл, который вполне закономерно падает, когда выжирает всю память. Почему цикл бесконечный — гуглите про сложение чисел с плавающей точкой.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы