Одна из особенностей JavaScript это не сколько порядок обработки строк кода (тут все понятно – строчка за строчкой), а в какой последовательности элементы попадают в память. Давайте разберем сегодня, что такое hoisting (хойстинг).
Возьмем обычный js код:
function getStatus (currentStatus) { var logStatus = "В Багдаде все " + currentStatus; console.log(logStatus); } getStatus('спокойно'); // В Багдаде все спокойно
Нам все понятно, сначала мы объявили функцию, а потом ее вызвали. Но что будет, если сначала вызвать функцию, а потом ее объявить? Давайте попробуем.
getStatus('спокойно'); function getStatus (currentStatus) { var logStatus = "В Багдаде все " + currentStatus; console.log(logStatus); } //В Багдаде все спокойно
И снова все работает!
Причина такого поведения кроется в хойстинге. Контекст выполнения интерпретатора JavaScript на уровне ЦП не совсем строчный, т.к. все объявленные переменные и функции помещаются в начало блока выделяемой памяти (=поднимаются), следовательно доступны для использования вне зависимости от их позиции в коде.
Обратите внимание, что хойстинг работает только с объявлением переменных и функций, но не инициализацией.
Во второй части посмотрим как действует (не действует) хойстинг для function
и class
, а так же что такое область видимости.