Вчера мы рассмотрели внутренности того, как область действия работает в Javascript, но сегодня мы более подробно рассмотрим придуманное явление «подъем» и его влияние на то, как код интерпретируется во время выполнения.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: вчера я забыл упомянуть термин лексическое окружение и его значение. В моих терминах это означает область с доступом ко всему, что находится внутри нее, а также доступ к дополнительным родительским средам, которые ее охватывают.

Во-первых, давайте рассмотрим небольшую игрушечную задачку, которая заставит наш мозг работать в правильном направлении. Попробуйте угадать, что этот фрагмент выведет для переменных a и b.

a; // ???
b; // ???
var a = b;
var b = 2;
a; // ???
b; // ???

Вы могли догадаться:

Вау, вы прекрасно знаете, что это приведет к ошибке! Зачем делать такую ​​гадость?!

Что ж, можно согласиться, что это некрасиво, но оказывается, что переменная a на самом деле выводит «undefined», а переменная b выводит «2». Почему?

Концепция "поднятия" связана с тем, как интерпретатор ведет себя во время выполнения. Для лучшего понимания разработчики описывают это как размещение всех объявленных функциональных выражений или переменных в верхней части среды, оставляя идентификаторы, такие как a = b, на их месте.

Вместо этого интерпретатор делает следующее:

var a; 
var b;
a; // undefined
b; // undefined
a = b;
b = 2;
a; // undefined
b; // 2

Объявления переменных перемещаются наверх, а все остальное находится в точном порядке внизу, поэтому никакая логика не запутается. Поскольку обеим переменным еще ничего не присвоено, они обе имеют значение «undefined».

Затем переменной a назначается переменная b, которая по-прежнему имеет значение «undefined», а затем b присваивается номер 2 в следующая строка.

Как видите, Hoisting работает и для функций. Попробуйте подумать о том, как будут выполняться эти строки кода, и я покажу вам ответ в следующем блоге! А пока удачного кодирования!

var a = function a() { console.log("a") };
var c = "c";
function b() { console.log("b") };

К вашим услугам. ❤ Сесилия Сиснерос