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