TGViewer
Defront — про фронтенд-разработку и не только Defront — про фронтенд-разработку и не только @defront · 5.04K subscribers
Post #141 853
Посмотрел выпуск видео-подкаста HTTP 203, в котором Джек Арчибальд и Сурма Дас рассказывают про особенности цикла for в JavaScript "JavaScript for-loops are… complicated".

Обычные циклы for (с var в инициализаторе) работают следующим образом: инициализируется счётчик, проверяется условие выхода, выполняется тело цикла, производится инкремент счётчика, проверяется условие, выполняется тело цикла и т.д. Если в инициализаторе используется let, то логика работы цикла немного меняется. Это объясняется тем, что переменная счётчика должна копироваться в создаваемую лексическую область тела цикла. Такое поведение закреплено в стандарте языка. C let, код ниже выведет цифры 0, 1, в отличие от цикла с var, который бы вывел цифры 2, 2.
for (let i = 0; i < 2; i++) {
setTimeout(() => console.log(i));
}


В итоге инкремент счётчика в случае с let происходит перед выполнением тела цикла, но не для первой (!) итерации. Эту особенность можно использовать для каких-нибудь странных вещей, но Джек и Сурма не рекомендуют так делать. Они подытожили подкаст советом использовать итераторы и инструкцию for...of вместо обычного цикла for, когда это имеет смысл. И я тоже считаю, что это хороший подход.

#js #quirks

https://www.youtube.com/watch?v=Nzokr6Boeaw
YouTube JavaScript for-loops are… complicated - HTTP203 In this episode, Jake and Surma dissect how for-loops actually work and how they’ve evolved. Turns out, it got complicated. Subscribe to the channel! → http://bit.ly/ChromeDevs1 Watch more HTTP203 → http://bit.ly/2sPq2LB Listen to the HTTP203 podcast for…
More from @defront
  1. Jan 7, 2024Channel name was changed to «Defront — про фронтенд-разработку и не только»
  2. Feb 24, 2022Про войну в Украине Шлю лучи поддержки братьям и сёстрам украинцам. В моём окружении нет н…
  3. Feb 23, 2022Qwik — возобновляемый JavaScript-фреймворк Райан Карниато поделился своими мыслями после р…
  4. Feb 22, 2022Обработка ошибок с помощью reportError Стэфан Джудис рассказал про малоизвестный метод для…
  5. Feb 21, 2022Выбор библиотеки по её размеру Владимир Клепов рассказал про подводные камни выбора библио…
  6. Feb 10, 2022Time-travel debugging в Svelte Сэм Ван Тассел рассказал про DeLorian — новый инструмент дл…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →