Объясните, пожалуйста, нормальным языком, без чатаГПТ, почему в консоли -1?
let i = 10;
let arr = [];
while (i--) {
arr.push(function () {
console.log(i);
});
}
arr[5](); //
JavaScript
Объясните БЕЗ чатаГПТ решение по JS
Потому, что петля вайл останавливается лишь на (-1) то есть когда заканчивается условие. при этом изменяет внешнюю переменную "i"
если бы условие было while (--i) то "i" было бы равно "0"
поскольку вы запускаете arr[5](); уже после завершения петли, то и получаете конечный результат, то есть после работы петли i = -1 или равно 0
если бы условие было while (--i) то "i" было бы равно "0"
поскольку вы запускаете arr[5](); уже после завершения петли, то и получаете конечный результат, то есть после работы петли i = -1 или равно 0
Владимир Линкер
Я не понимаю, какое значение i попадает внутрь функции при каждой итерации? Начался цикл с 10, ок, потом 10-1, ок, в этот моментчему равно значение i внутри функции?
Владимир Линкер
Тогда я вообще запуталась, если у меня там ссылка на переменную, я так понимаю, что это ссылка не на ее текущее значение, а всегда на статичное число 10 в данном примере?
Александр Иванов
Поняли почему петля вайл останавливается на числе ?
Потому что i во всех случаях одна и та же. При пост-декременте она уменьшается на единицу и возвращает старое значение. При i = 0 цикл остановится, но i ещё раз уменьшится, получится i = -1.
Потому что цикл продолжается, пока i не равен нулю.
В момент, когда i равен 0, цикл завершается.
Из-за операции i-- сначала проходит проверка и лишь после вычитание. То есть после проверки i равен 0, цикл завершается и ещё вычитается единица.
В JS есть нулевые значения - это 0, "", false, null, undefined. При подобных значениях условие не выполняется в if, while и им подобным.
В момент, когда 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.
Это происходит потому, что функции, помещаемые в массив arr, являются замыканиями, которые ссылаются на одну и ту же переменную i в памяти. Когда любая из этих функций вызывается после завершения цикла, все они регистрируют конечное значение i, которое равно -1.
Похожие вопросы
- Объясните кусок кода змейки на js
- Помогите определиться с выбором нового языка (JS(TS) vs Java)
- Js фреймворки, что полезного можно для себя найти?
- В чем цель фреймворков js web?
- [HTML/CSS/JS] Как сохранять изменённые в .js данные оффлайн-сервера локально?
- Почему jQuery методы популярнее js методов при общении с ДоМ?
- ПОЧЕМУ JS ТАКОЙ НЕПОНЯТНЫЙ???
- вопрос по JS. " простой ()";
- Порядок изучени JavaScripta. Путь к Node.js. Нужен совет по обучению от программистов
- Почему иногда в вакансиях пишут "знания JavaScript или JQuery"? По сути JQuery - лишь библиотека для JS.