Демистификация подъема для разработчиков Javascript

Демистификация подъема для разработчиков Javascript

9 марта 2023 г.

Поднятие — одна из тех концепций JavaScript, которая часто сбивает с толку разработчиков, особенно во время собеседований. Многие разработчики изо всех сил пытаются объяснить разницу между подъемом в переменных var, let и const и как это влияет на выполнение их кода. Это может привести к сильному потоотделению и нервозности во время интервью.

Тем не менее, с информацией, представленной в этой статье, понимание подъема должно быть легким. Предоставляя примеры и пояснения поведения подъема, эта статья направлена ​​на то, чтобы демистифицировать эту концепцию и упростить для разработчиков понимание и объяснение. Теперь вы сможете уверенно объяснить интервьюеру, что такое подъем, и успешно пройти собеседование.

Подъем — это поведение в JavaScript, при котором интерпретатор перемещает объявления переменных, функций и классов в верхнюю часть их области видимости перед выполнением кода. Основываясь на том, как JavaScript обрабатывает подъем для разных элементов, я классифицировал подъем на три различных типа. Рассмотрим каждый из них на примерах:

1. Функции

Объявления функций перемещаются в верхнюю часть их области действия, что означает, что вы можете использовать функцию до того, как она будет объявлена ​​в вашем коде.

Например, следующий код будет работать, потому что функция foo() поднимается интерпретатором в начало области видимости:

foo();
function foo() {
  console.log("Hello, World!");
}

Важно отметить, что функции, созданные с использованием функциональных выражений и стрелочных функций, не поднимаются, и вызов их до объявления не будет работать. Давайте рассмотрим пример:

foo(); // ReferenceError: foo is not defined
const foo = function() {
  console.log("Hello, World!");
}

2. Вар

Переменные, объявленные с помощью var, также поднимаются наверх своей области, однако поднимается только объявление, а не инициализация. Проверьте это:

console.log(num); // undefined
var num = 10;
console.log(num); // 10

Вы получите undefined в качестве первого вывода и 10 во втором. Это связано с тем, что переменная поднимается вверх, но без значения инициализации по умолчанию она имеет значение undefined.

3. Пусть, Константа и Класс:

Теперь поговорим о подъеме с помощью let и const. Существует распространенное заблуждение, что let и const не поднимаются, но это не так. Эти два ключевых слова похожи тем, что они оба поднимаются наверх своей области действия, как и var.

Однако между ними есть принципиальная разница. Когда вы пытаетесь получить доступ к переменной let или const до того, как она была объявлена, вы получите ReferenceError: Cannot access 'num' before initialization . Это связано с тем, что эти переменные поднимаются без инициализации по умолчанию, в отличие от var.

{
  console.log(num); // ReferenceError: Cannot access 'num' before initialization
  let num = 10;
  console.log(num);
}

Это вызовет ошибку, и программа перестанет выполняться. Это так называемая «временная мертвая зона», время во время выполнения, когда переменные let или const поднимаются, но недоступны.

Может возникнуть вопрос, чем отличается поведение при доступе к переменной, объявленной с помощью let или const, перед инициализацией от доступа к необъявленной переменной. Разница заключается в сообщении об ошибке.

Возьмем пример:

{
  console.log(stuff); // ReferenceError: stuff is not defined
  console.log(goodStuff); // ReferenceError: Cannot access 'goodStuff' before initialization
  let goodStuff = "Something really good";
}

Здесь мы можем заметить, что сообщение об ошибке для «goodStuff» указывает на то, что он поднят, и интерпретатор распознает его существование, но он еще не инициализирован. Напротив, интерпретатор вообще не распознает «материал» как переменную. Объявления class также поднимаются так же, как let и const с временной мертвой зоной.

Заключительные мысли

Я надеюсь, что эта статья помогла вам понять подъем в JavaScript и то, как он работает с различными типами переменных, функциями и классами. Эта концепция может быть сложной, но вы можете писать более качественный и эффективный код, если поймете ее. Продолжайте практиковаться и экспериментировать с кодом, чтобы продолжать совершенствовать свои навыки. Удачного кодирования!

Совет профессионала:

Рекомендуется избегать использования var для объявления переменных в JavaScript, так как это может привести к непредсказуемым результатам и путанице при обработке переменных. Вместо этого рекомендуется использовать let или const.


Также опубликовано здесь


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE