Область видимости и поднятие переменных в JS

2 мин на чтение

Одна из особенностей 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, а так же что такое область видимости.

Игорь Чишкала

Директор по технологиям в SoftForge. Люблю ИТ, пишу технические статьи в этом блоге или для сайта фриланс-биржи Upwork. Кодю на PHP с использованием фреймворков Laravel или Symfony.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *