V tomto tutoriále sa dozviete o zdvíhaní JavaScriptu pomocou príkladov.
Zdvíhanie v JavaScripte je správanie, pri ktorom je možné pred vyhlásením použiť funkciu alebo premennú. Napríklad,
// using test before declaring console.log(test); // undefined var test;
Vyššie uvedený program funguje a výstup bude nedefinovaný. Vyššie uvedený program sa chová ako
// using test before declaring var test; console.log(test); // undefined
Pretože test premenných je iba deklarovaný a nemá žiadnu hodnotu, undefined
je mu priradená hodnota.
Ak sa chcete dozvedieť viac informácií o premenných, navštívte Premenné jazyka JavaScript.
Poznámka : Aj keď sa pri zdvíhaní zdá, že sa deklarácia v programe posunula nahor, stane sa skutočne to, že deklarácie funkcií a premenných sa pridajú do pamäte počas fázy kompilácie.
Variabilné zdvíhanie
Pokiaľ ide o premenných a konštánt, kľúčové slovo var
je zdvihnutá a let
a const
nedovolí dvíhať.
Napríklad,
// program to display value a = 5; console.log(a); var a; // 5
Vo vyššie uvedenom príklade sa použije premenná a pred jej vyhlásením. A program funguje a zobrazuje výstup 5. Program sa chová ako:
// program to display value var a; a = 5; console.log(a); // 5
V JavaScripte však nie sú inicializácie zdvihnuté. Napríklad,
// program to display value console.log(a); var a = 5;
Výkon
nedefinované
Vyššie uvedený program sa chová ako:
var a; console.log(a); a = 5;
Iba deklarácia sa presunie do pamäte vo fáze kompilácie. Hodnota premennej a je undefined
preto, že a je vytlačené bez jeho inicializácie.
Keď sa premenná používa vo vnútri funkcie, premenná sa zdvihne iba za hornú časť funkcie. Napríklad,
// program to display value var a = 4; function greet() ( b = 'hello'; console.log(b); // hello var b; ) greet(); // hello console.log(b);
Výkon
ahoj Uncaught ReferenceError: b nie je definované
Vo vyššie uvedenom príklade je premenná b zdvihnutá na vrchol funkcie greet
a stáva sa lokálnou premennou. Preto b je prístupné iba vo vnútri funkcie. b sa nestane globálnou premennou.
Ak sa chcete dozvedieť viac o miestnych a globálnych premenných, navštívte rozsah premenných JavaScriptu.
Poznámka : Pri zdvíhaní je vyhlásenie o premennej prístupné iba v bezprostrednom rozsahu.
Ak sa s let
kľúčovým slovom použije premenná, táto premenná sa ne zdvihne. Napríklad,
// program to display value a = 5; console.log(a); let a; // error
Výkon
Uncaught ReferenceError: Nie je možné získať prístup k znaku „a“ pred inicializáciou
Počas používania let
musí byť premenná deklarovaná ako prvá.
Funkčné zdvíhanie
Funkciu je možné zavolať pred jej vyhlásením. Napríklad,
// program to print the text greet(); function greet() ( console.log('Hi, there.'); )
Výkon
Ahoj
Vo vyššie uvedenom programe je funkcia greet
vyvolaná pred jej vyhlásením a program zobrazuje výstup. Je to z dôvodu zdvíhania.
Ak sa však funkcia použije ako výraz , dôjde k chybe, pretože sa zdvíhajú iba vyhlásenia. Napríklad;
// program to print the text greet(); let greet = function() ( console.log('Hi, there.'); )
Výkon
Uncaught ReferenceError: pozdrav nie je definovaný
Ak by var
bol použitý vo vyššie uvedenom programe, chyba by bola:
Uncaught TypeError: greet is not a function
Poznámka : Zdvíhanie sa vo všeobecnosti nevykonáva v iných programovacích jazykoch, ako sú Python, C, C ++, Java.
Zdvíhanie môže spôsobiť nežiaduce výsledky vo vašom programe. Najlepšie je najskôr premenné a funkcie deklarovať pred ich použitím a vyhnúť sa zdvíhaniu.
V prípade premenných je lepšie použiť let
ako var
.