Подъем — это стандартное поведение 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` поднимаются, но вы не можете получить к ним доступ до того, как фактическое объявление будет оценено во время выполнения.
Я очень надеюсь, что у вас нет путаницы по поводу подъема. Удачного кодирования 👨💻
