Tokie skaitytojai kaip jūs padeda palaikyti MUO. Kai perkate naudodami nuorodas mūsų svetainėje, galime uždirbti filialų komisinius.
Pakėlimas yra „JavaScript“ mechanizmas, leidžiantis pasiekti kintamuosius ir funkcijas prieš juos inicijuojant. Tokios deklaracijos iškėlimas efektyviai perkeliamas į jos taikymo sritį.
Sužinokite viską apie tai, kaip pakėlimas veikia „JavaScript“ ir kaip geriausiai jį valdyti, kad išvengtumėte klaidų kode.
Kėlimo kintamieji Su var, let ir const
Pakėlimas įmanomas, nes „JavaScript“ naudoja JIT (Just-in-Time) kompiliavimo sistemą, kuri nuskaito jūsų kodą, kad nustatytų visus kintamuosius atitinkamose srityse.
Tada JIT kompiliatorius pakelia visus kintamųjų deklaracijų egzempliorius į jų taikymo sritį. „JavaScript“ iškelia tik kintamųjų deklaracijas, o ne jų iniciacijas.
Kintamųjų elgesys, kai jie pakeliami, priklauso nuo raktinio žodžio, kuriuo juos deklaruojate, nes kiekvienas raktinis žodis elgiasi skirtingai.
var
Prieiga prie neinicijuoto kintamojo, deklaruoto su var raktinis žodis grįš neapibrėžtas. Pavyzdžiui:
konsolė.log (foo); // neapibrėžtas
var foo = 2;
Aukščiau pateiktas kodo žurnalas neapibrėžtas nes skambina console.log prieš inicijuojant kintamąjį.
„JavaScript“ kompiliatorius peržiūri ankstesnį kodo bloką taip:
var foo;
konsolė.log (foo); // neapibrėžtas
foo = 2;
Kėlimo metu kintamieji paklūsta „JavaScript“ taikymo srities taisyklės. „Javascript“ pakels kintamąjį tik į aprėpties viršų, kurioje jį paskelbėte. Bandant užregistruoti kintamojo vertę, esančią už jo deklaruotos apimties, atsiras a Nuorodos klaida. Pavyzdžiui, jei deklaruosite kintamąjį funkcijos viduje, jis nebus matomas už šios srities ribų:
funkcijamyFunction() {
konsolė.log (foo); // neapibrėžtas
var foo = 10;
}
myFunction();
konsolė.log (foo); // ReferenceError: foo neapibrėžtas
Bandant pasiekti kintamąjį, esantį už jo taikymo srities, atsiras a Nuorodos klaida.
tegul ir konst
Pagal MDN dokumentacija apie leisti ir konst kėlimas, „JavaScript“ taip pat pakelia kintamuosius, deklaruotus su leisti ir konst raktinius žodžius. Tačiau skirtingai nuo kintamųjų, deklaruotų su var raktažodį, jie nėra inicijuojami an neapibrėžtas vertė.
Pavyzdžiui:
funkcijamyFunction() {
konsolė.log (foo); // neapibrėžtas
konsolė.log (baras); // Nuorodos klaida: prieš inicijuojant negalima pasiekti „juostos“.
konsolė.log (baz); // ReferenceError: Nepavyko pasiekti „baz“ prieš inicijuojantvar foo = 5;
leisti juosta = 10;
konst baz = 15;
}
myFunction();
Negalite pasiekti kintamųjų, deklaruotų naudojant raktinius žodžius let ir const, prieš inicijuodami juos reikšme.
Kėlimo funkcijos
„JavaScript“ keltuvai veikia panašiai kaip kintamieji. Kaip ir su kintamaisiais, tai priklauso nuo to, kaip juos deklaruojate. Pavyzdžiui, „JavaScript“ funkcijų deklaracijas pakelia skirtingai nei funkcijų išraiškos.
Funkcijos deklaracija yra funkcija, deklaruota pavadinimu, o funkcijos išraiška yra funkcija, kurios pavadinimo galite praleisti. Pavyzdžiui:
funkcijafoo() {
// funkcijos deklaracija
}
konst juosta = () => {
// funkcijos išraiška
}
„JavaScript“ pakelia funkcijų deklaracijas, bet ne funkcijų išraiškas. Pavyzdžiui:
foo (); // 5
baras (); // Tipo klaida: bar() nėra funkcija// Funkcijos deklaracija
funkcijafoo() {
konsolė.log(5);
}
// Funkcijos išraiška
var juosta = funkcijaišraiška() {
konsolė.log(10);
};
Šis kodas skambina foo prieš paskelbdamas ir inicijuodamas kaip funkciją, bet vis tiek registruojasi 5 prie konsolės. Tačiau bando paskambinti baras rezultatai a Tipo klaida.
Kėlimo valdymas
Žinodami apie pakėlimą ir galimas klaidas, kurios gali kilti, jei jos valdomos neteisingai, galite sutaupyti ilgas derinimo valandas. Štai keletas būdų, kaip valdyti kėlimą.
Deklaruokite kintamuosius funkcijų viduje
Deklaruokite kintamuosius funkcijose, kurios juos pasieks. Ne visada galėsite tai padaryti, nes jums gali prireikti visuotinio kintamojo, kurį galite pasiekti naudodami kelias funkcijas. Taigi įsitikinkite, kad deklaruojate kintamuosius visame pasaulyje tik tada, kai to tikrai reikia.
Deklaruoti kintamuosius su let arba const
Visada turėtumėte naudoti let ir const raktinius žodžius vietoje var raktinis žodis deklaruojant kintamuosius. Ši praktika yra naudinga deklaruojant vietinius kintamuosius funkcijos viduje. Žinodami tinkamus būdus deklaruoti kintamuosius JavaScript sumažina klaidų, sukeltų dėl jūsų kodo pakėlimo, tikimybę.
Paskelbkite kintamuosius jų taikymo srities viršuje
Deklaruokite visus savo kintamuosius atitinkamos apimties viršuje, prieš bet kokius kitus teiginius. Taip užtikrinsite, kad „JavaScript“ kompiliatorius neturės kelti šių kintamųjų, kad juos pasiektų.
Griežto režimo naudojimas
Griežtas režimas yra „JavaScript“ režimas kuri reguliuoja prastą sintaksę, optimizuoja kodo vykdymo laiką ir draudžia piktnaudžiavimą laisvai įvesta JavaScript sintaksė, kompiliavimo metu išmetant klaidas.
Pvz., „nepaprastu režimu“ dėl pakėlimo galite pasiekti kintamąjį, esantį už inicijuotos funkcijos ribų, net jei jis nebuvo deklaruotas:
myFunction();
konsolė.log (foo); // 20
funkcijamyFunction() {
foo = 20;
}
Aukščiau esančiame kodo bloke „JavaScript“ automatiškai deklaruoja foo ir pakelia jį į pasaulinės apimties viršų, nepaisydamas apimties, kurioje jį inicijavote.
Galite naudoti griežtą režimą, kad ištaisytumėte šią elgseną ir pateiktumėte klaidą, jei bandysite pasiekti kintamąjį už jo funkcijos ribų.
Griežtas režimas visiškai nenustoja kelti. Vietoj to, jis apsaugo nuo painiausių ir klaidų linkusių kėlimo formų. Vis dar svarbu suprasti bendrą kėlimo koncepciją ir taisykles, net ir naudojant griežto režimo apsauginį tinklą.
Norėdami pasirinkti griežtą režimą visuotiniu lygiu, scenarijaus failo viršuje nurodykite sintaksę:
"naudotigriežtas"; // arba 'naudotigriežtas'
Norėdami pasirinkti griežtą režimą funkcijos lygiu, prieš bet kokius teiginius nurodykite sintaksę funkcijos korpuso viršuje:
funkcijamyStrictFunction() {
"naudotigriežtas";
}
Jei paskelbsite griežtą režimą funkcijos lygiu, nustatymas bus taikomas tik tos funkcijos teiginiams.
Griežto režimo paskelbimas pasauliniu lygmeniu neleidžia pasiekti kintamųjų už atitinkamos apimties ribų:
"naudotigriežtas";
myFunction();
konsolė.log (foo); // ReferenceError: foo neapibrėžtas
funkcijamyFunction() {
foo = 20;
}
Įjungus griežtą režimą, „JavaScript“ kompiliatorius pakels myFunction() į viršų be nedeklaruojamo kintamojo.
Supraskite, kas turi įtakos kėlimui
Kėlimas yra gana unikalus „JavaScript“ ir gali būti labai painus elgesys, kai reikia susisukti galvą. Tai gali turėti įtakos kintamiesiems ir funkcijoms, tačiau yra būdų, kaip to išvengti, jei reikia.
Keletas veiksnių gali turėti įtakos kėlimui, todėl geriausia vengti bet kokio kintamųjų ar funkcijų pakėlimo jūsų kode.