Подъем в Javascript

Javascript как язык имеет множество странных концепций, и одной из таких концепций является Подъем.

Взгляните на этот пример:

console.log(a);         //line1
var a = 'Javascript';   //line2
console.log(a);         //line3
Output:
undefined
Javascript

Как и в других языках программирования, вы не можете получить доступ к переменной, если мы не определили ее, если мы это сделаем, мы получим ошибку времени выполнения. Но это не относится к Javascript, поскольку мы видим, что вывод первой строки — «undefined».

Можно подумать, что строка1 выводит undefined из-за того, что она используется перед объявлением. Но подождите, а как насчет этого тогда:

console.log(a)
Output:
console.log(a);             
            ^ 
ReferenceError: a is not defined

Итак, на этот раз мы получаем ReferenceError от интерпретатора Javascript. Но почему мы не получили ошибку ссылки в первом примере? Потому что в этом первом примере переменная a была доступна до выполнения строки 1.

Такое поведение Javascript хорошо объясняется тем, как выполняется JavaScript. При загрузке сценария создается контекст выполнения (среда, в которой выполняется код JavaScript). И контекст выполнения создается в 2 этапа:

  1. Этап создания
  2. Этап выполнения

Наэтапесозданиядвижок JavaScript настраивает пространство памяти для переменных и функций. На этом этапе не происходит присвоения переменных, и каждая переменная изначально устанавливает значение undefined.

На этапе выполнения интерпретатор начинает выполнение кода, и он имеет ссылку на все переменные и функции, которым выделена память на этапе создания.

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

Поднятие иногда ошибочно понимают как перемещение кода объявления вверху, но под капотом все по-другому.

Кроме того, мы не должны сами присваивать переменной значение undefined.

var a = undefined; // Never do this.

Позвольте движку Javascript иметь привилегию. Вместо этого вы можете использовать null, если это необходимо. Это очень полезно для отладки кода.

var a = null;

Заключение

Никакой код не перемещается вверху.