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

Примечание. Хостинг не означает, что JavaScript переупорядочивает или перемещает код один над другим.

E.g.

console.log(name); 
// Uncaught ReferenceError: name is not defined
let name = 'Deepa';
  • переменные, объявленные с помощью let и const, поднимаются, но не инициализируются значением по умолчанию.
  • Доступ к let или const до его объявления даст: Uncaught ReferenceError: невозможно получить доступ до инициализации
  • Помните, что сообщение об ошибке говорит о том, что переменная где-то инициализирована.

Переменный подъем с var

Когда интерпретатор поднимает переменную, объявленную с помощью var, он инициализирует ее значение неопределенным, в отличие от let или const.
Например.

console.log(name); // undefined
var name = 'deepa';
console.log(name); // deepa

Теперь давайте проанализируем это поведение:

var name;
console.log(name); // undefined
name = 'partha';
console.log(name); // partha

Помните, что первый console.log(name) выводит undefined, потому что имя поднято и получает значение по умолчанию (а не потому, что переменная никогда не объявлялась).

Использование неопределенной переменной вызовет ReferenceError

console.log(name); // Uncaught ReferenceError: name is not defined

Теперь давайте посмотрим, что произойдет, если мы не объявим var.

console.log(name); // partha
name = 'partha';

name = допустимо назначение необъявленной переменной.

JavaScript позволяет нам обращаться к переменным до того, как они будут объявлены. Такое поведение является необычной частью javascript и может привести к ошибкам.

Использование переменной до ее объявления нежелательно.

Причина, по которой мы получаем ошибку ссылки, когда пытаемся получить доступ к let или const до ее объявления, — это Temperal Dead Zone.

  • TDZ начинается с начала переменных, охватывающих область видимости, и заканчивается, когда она объявлена.
  • Доступ к переменной в TDZ дает ReferenceError

E.g.

    // start of foo's TDZ
    let bar = 'bar';
    console.log(bar); // bar
    console.log(foo); // ReferenceError: Because we're in TDZ
    let foo = 'foo';
    // end of foo's TDZ
  • тип TDZ для let или const: ReferenceError
  • тип ТДЗ для var: undefined

Функциональный подъем

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

foo(); 
function foo() {
    console.log('foo'); // foo
}

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

E.g.

foo(); // Uncaught TypeError: foo is not a function
var foo = function() {

}

bar(); // Uncaught ReferenceError
let bar = function() {

}

Uncaught ReferenceError: невозможно получить доступ к «bar» до инициализации аналогично для const.

Для функции, которая никогда не объявлялась:

foo(); // Uncaught ReferenceError: foo is not defined