JavaScript·100 вопросов

Что такое hoisting?

Ответ

Механизм hoisting, или поднятие, представляет собой поведение интерпретатора JavaScript, при котором объявления переменных и функций перемещаются в верхнюю часть их области видимости перед началом выполнения кода. Важно понимать, что физически строки кода не перемещаются в файле, но на этапе компиляции память под них выделяется заранее. При этом способ поднятия напрямую зависит от ключевого слова, использованного при объявлении. Переменные, созданные через var, поднимаются в начало функциональной области видимости и автоматически инициализируются значением undefined, из-за чего к ним можно обратиться до строки объявления, получив неопределенный результат, но не ошибку.

С появлением let и const поведение изменилось ради повышения надежности кода. Объявления через let и const также поднимаются, но они не получают начального значения и помещаются в так называемую временную мертвую зону, или temporal dead zone. Попытка обратиться к такой переменной до строки ее физического объявления в коде приведет к выбросу ошибки ReferenceError. Что касается функций, то объявления классических функций через function declaration поднимаются полностью, включая их тело, что позволяет вызывать функцию до того, как она была написана в тексте скрипта. При этом важно помнить, что поднимаются исключительно сами объявления, а не операции присваивания значений переменным.

Полезен ли этот ответ?

Другие вопросы этой темы

Связанные вопросы из других тем