Подъем — это стандартное поведение JavaScript для перемещения объявлений наверх.

Мы все это читаем. Но что именно произошло при подъеме? Мы обсудим внутреннюю задачу подъема и многие недоразумения, связанные с подъемом. Давайте начнем.

Во-первых, мы должны знать, что такое объявление и инициализация? Иногда это создает путаницу для понимания подъема.

var a; //declaration
a = 10; // initialization

Теперь мы поймем, каково поведение по умолчанию при перемещении объявлений вверх с примерами.

var c = 5;
var e = 6;
console.log(c);

Как javascript выполняет этот код в бэкэнде?

Javascript сначала находит все объявления и берет их в начало кода.

var c;
var e;
c= 5;
e =6;
console.log(c)

Javascript находит c и e сверху. Это подъем.

Теперь, что, если мы будем кодировать так. Это работоспособно или нет?

console.log(c);
var c = 5;
var e = 6;

каков результат console.log(c)? Ответ «не определен». Потому что этот код выполняется так.

var c;
var e;
console.log(c);
c= 5;
e =6

При выполнении console.log(c) значение инициализации для переменной c отсутствует.

Мы можем написать этот код так, вывод будет таким же.

console.log(c);
c= 5;
e =6
var c;
var e;

В любом случае, что, если будет вызывать функцию до инициализации функции? Это будет `ошибка`, `неопределено` или напечатать значение функции. Давайте перейдем к коду.

var c = 10;
console.log(hoisting)
hoisting(“blog”)
function hoisting(name) {
 console.log(“please like this” + “ “ + `${name}`);
}

Это распечатывает значение. Теперь попытайтесь понять, что здесь произошло. Javascript выделил память для «переменных» и «функций» до того, как код был выполнен. На этом начальном уровне выделенной памяти «переменные» не определены, а «функция» копирует все функции и сохраняет их. Но «функция массива» не печатает такое значение. Потому что `функция массива` ведет себя как `переменная`, когда выделяется начальная память. Мы получим ясное представление из этого примера.

console.log(a); // undefined
//a() // not initialize
var a = () => {
 console.log(“a”); //a 
}
a();
console.log(a); //[Function: a]
a() 
function a() {
 console.log(“a”); // a
}

Что, если код такой,

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

Ответ будет неопределенным. Если подумать, как и почему? Давайте посмотрим, как javascript обрабатывает этот код здесь.

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

В функции `var a` переопределяется, но не инициализирует никакого значения. Итак, ответ не определен.

Если вы заметили все мои примеры, я использую только `var`. Потому что `let` и `const` поднимаются, но вы не можете получить к ним доступ до того, как фактическое объявление будет оценено во время выполнения.

Я очень надеюсь, что у вас нет путаницы по поводу подъема. Удачного кодирования 👨‍💻