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

Следните елементине се повдигатв JavaScript:

1. Функции, дефинирани с израз.

2. Променливи и константи, декларирани с let или const.

3. Функции на стрелките.

В JavaScript променливата може да се използва преди да бъде декларирана.

Добре… но какво означава това? Не разбирам какво се опитваш да кажеш.

Нека ви помогна да разберете това с няколко примера.

Когато се повдигне декларация на функция, цялото тяло на функцията се повдига с нея. И така, след като интерпретаторът приключи с кода в първия пример, той работи по-скоро така:

Но... не е ли кодът след оператор за връщане недостижим?

При изпълнението на JavaScript има Context (който ECMA 5 разделя на LexicalEnvironment, VariableEnvironment и ThisBinding) и Process (набор от изрази, които да бъдат извиквани последователно).

Декларациите допринасят за VariableEnvironment, когато се въведе обхватът на изпълнение. Те се различават от изявленията (като return) и не са предмет на техните правила за процес.

Нека видим още един пример, този път с някои функционални изрази.

Имайте предвид, че променливите се инициализират до недефинирани, когато се създават. На променлива с инициализатор се присвоява стойността на нейния AssignmentExpression, когато VariableStatement се изпълнява, а не когато променливата е създадена.

var myFunction = function () {
   // some executable code
}

В горния кодов фрагмент лявата страна var myFunction е декларация на променлива.

Декларациите на променливи се повдигат, но техните изрази за присвояване не. Така че, когато myFunction се повдигне, интерпретаторът първоначално задава var myFunction = undefined. Самата дефиниция на функцията не се повдига.

Имайте предвид горните точки и нека да разгледаме как работи пример два.

Ще работи нещо подобно:

След като функцията, създадена от първия функционален израз, бъде извикана, кодът за втория израз става недостъпен.

Декларирайте променливите си в горната част, за да избегнете каша

Повдигането, колкото и забавно да е, може да доведе до грешки, тъй като е доста лесно да се пренебрегне.

Можете да опитате строг режим, като използвате директивата use strictв горната част. JavaScript в строг режим не позволява използването на променливи, ако не са декларирани.

Това беше всичко за тази статия. Надявам се, че ви помогна да получите малко яснота относно повдигането в JavaScript.