JavaScript

Объясните БЕЗ чатаГПТ решение по JS

Объясните, пожалуйста, нормальным языком, без чатаГПТ, почему в консоли -1?
let i = 10;
let arr = [];

while (i--) {
arr.push(function () {

console.log(i);
});
}
arr[5](); //
Потому, что петля вайл останавливается лишь на (-1) то есть когда заканчивается условие. при этом изменяет внешнюю переменную "i"
если бы условие было while (--i) то "i" было бы равно "0"

поскольку вы запускаете arr[5](); уже после завершения петли, то и получаете конечный результат, то есть после работы петли i = -1 или равно 0
АИ
Александр Иванов
68 893
Лучший ответ
Владимир Линкер Я не понимаю, какое значение i попадает внутрь функции при каждой итерации? Начался цикл с 10, ок, потом 10-1, ок, в этот моментчему равно значение i внутри функции?
Владимир Линкер Тогда я вообще запуталась, если у меня там ссылка на переменную, я так понимаю, что это ссылка не на ее текущее значение, а всегда на статичное число 10 в данном примере?
Александр Иванов Поняли почему петля вайл останавливается на числе
 0 
?
Потому что i во всех случаях одна и та же. При пост-декременте она уменьшается на единицу и возвращает старое значение. При i = 0 цикл остановится, но i ещё раз уменьшится, получится i = -1.
Don Dimon
Don Dimon
93 853
Потому что цикл продолжается, пока i не равен нулю.
В момент, когда i равен 0, цикл завершается.
Из-за операции i-- сначала проходит проверка и лишь после вычитание. То есть после проверки i равен 0, цикл завершается и ещё вычитается единица.

В JS есть нулевые значения - это 0, "", false, null, undefined. При подобных значениях условие не выполняется в if, while и им подобным.
потому что у let область видимости текущий блок {}
Этот код создает переменную i и устанавливает ее значение равным 10. Это также создает пустой массив arr. Цикл while выполняется 10 раз, каждый раз уменьшая значение i на 1. На каждой итерации цикла функция помещается в массив arr. Эта функция записывает текущее значение i в консоль при вызове. После завершения выполнения цикла вызывается функция с индексом 5 массива arr, которая регистрирует значение -1 на консоли.

Это происходит потому, что функции, помещаемые в массив arr, являются замыканиями, которые ссылаются на одну и ту же переменную i в памяти. Когда любая из этих функций вызывается после завершения цикла, все они регистрируют конечное значение i, которое равно -1.
Влад Ермилов
Влад Ермилов
1 965