Повдигането е поведението по подразбиране на 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.