Selles õpetuses saate näidete abil õppida JavaScripti tõstmist.
JavaScripti tõstmine on käitumine, kus funktsiooni või muutujat saab kasutada enne avaldamist. Näiteks,
// using test before declaring console.log(test); // undefined var test;
Ülaltoodud programm töötab ja väljund on määratlemata. Ülaltoodud programm käitub nii
// using test before declaring var test; console.log(test); // undefined
Kuna muutuja test on ainult deklareeritud ja sellel pole väärtust, undefined
määratakse sellele väärtus.
Kui soovite muutujate kohta lisateavet, külastage JavaScripti muutujaid.
Märkus . Ehkki näib, et deklaratsioon on programmis ülespoole liikunud, juhtub tegelikult see, et funktsioon ja muutujadeklaratsioonid lisatakse kompileerimise etapis mällu.
Muutuv tõstmine
Seoses muutujad ja konstandid, märksõna var
heisatakse ja let
ja const
ei võimalda heiskamise.
Näiteks,
// program to display value a = 5; console.log(a); var a; // 5
Ülaltoodud näites kasutatakse muutujat enne selle deklareerimist. Ja programm töötab ja kuvab väljundi 5. Programm käitub järgmiselt:
// program to display value var a; a = 5; console.log(a); // 5
Kuid JavaScripti initsialiseerimist ei tühistata. Näiteks,
// program to display value console.log(a); var a = 5;
Väljund
määratlemata
Ülaltoodud programm käitub järgmiselt:
var a; console.log(a); a = 5;
Ainult deklaratsioon teisaldatakse kompileerimise faasis mällu. Seega on muutuja a väärtus undefined
seetõttu, et a trükitakse seda initsialiseerimata.
Samuti, kui muutujat kasutatakse funktsiooni sees, tõstetakse muutuja ainult funktsiooni tippu. Näiteks,
// program to display value var a = 4; function greet() ( b = 'hello'; console.log(b); // hello var b; ) greet(); // hello console.log(b);
Väljund
tere Uncaught ReferenceError: b pole määratletud
Ülaltoodud näites tõstetakse muutuja b funktsiooni tippu greet
ja sellest saab lokaalne muutuja. Seega on b juurdepääsetav ainult funktsiooni sees. b ei muutu globaalseks muutujaks.
Kohalike ja globaalsete muutujate kohta lisateabe saamiseks külastage JavaScripti muutuja ulatust.
Märkus . Tõstmisel on muutuja deklaratsioon juurdepääsetav ainult vahetu ulatusega.
Kui let
märksõnaga kasutatakse muutujat , siis seda muutujat ei tõsteta. Näiteks,
// program to display value a = 5; console.log(a); let a; // error
Väljund
Püüdmata ReferenceError: enne lähtestamist ei pääse 'a' juurde
Kasutamise ajal let
tuleb kõigepealt deklareerida muutuja.
Funktsiooni tõstmine
Funktsiooni saab enne selle deklareerimist kutsuda. Näiteks,
// program to print the text greet(); function greet() ( console.log('Hi, there.'); )
Väljund
Tere
Ülaltoodud programmis greet
kutsutakse funktsioon enne selle deklareerimist ja programm näitab väljundit. Selle põhjuseks on tõstmine.
Kuid kui funktsiooni kasutatakse avaldisena , ilmneb tõrge, sest ainult deklaratsioonid on heisatud. Näiteks;
// program to print the text greet(); let greet = function() ( console.log('Hi, there.'); )
Väljund
Püüdmatu ReferenceError: tervitus pole määratletud
Kui var
seda kasutati ülaltoodud programmis, oleks viga järgmine:
Püütamata TypeError: tervitus pole funktsioon
Märkus . Üldiselt ei tehta tõstmist muudes programmeerimiskeeltes, nagu Python, C, C ++, Java.
Tõstmine võib teie programmis põhjustada soovimatuid tulemusi. Parim on deklareerida muutujad ja funktsioonid enne nende kasutamist ning vältida tõstmist.
Muutujate puhul on parem kasutada let
kui var
.