Tādi lasītāji kā jūs palīdz atbalstīt MUO. Veicot pirkumu, izmantojot saites mūsu vietnē, mēs varam nopelnīt filiāles komisiju.
Pacelšana ir JavaScript mehānisms, kas ļauj piekļūt mainīgajiem un funkcijām pirms to inicializācijas. Paceļot šādu deklarāciju, tā tiek efektīvi pārvietota uz tās darbības jomas augstāko punktu.
Uzziniet visu par to, kā pacelšana darbojas JavaScript un kā to vislabāk pārvaldīt, lai izvairītos no kļūdām kodā.
Pacelšanas mainīgie ar var, let un const
Pacelšana ir iespējama, jo JavaScript izmanto JIT (Just-in-Time) kompilācijas sistēmu, kas skenē jūsu kodu, lai identificētu visus mainīgos to attiecīgajā jomā.
Pēc tam JIT kompilators kompilēšanas laikā paceļ visus mainīgo deklarāciju gadījumus to darbības jomas augšdaļā. JavaScript paceļ tikai mainīgo deklarācijas, nevis to inicializācijas.
Mainīgo darbība, kad tie tiek pacelti, ir atkarīga no atslēgvārda, ar kuru tos deklarējat, jo katrs atslēgvārds darbojas atšķirīgi.
var
Piekļuve neinicializētam mainīgajam, kas deklarēts ar var atslēgvārds atgriezīsies nenoteikts. Piemēram:
konsole.log (foo); // nenoteikts
var foo = 2;
Iepriekš minētie kodi tiek reģistrēti nenoteikts jo tas aicina console.log pirms tas inicializē mainīgo.
JavaScript kompilators aplūko iepriekšējo koda bloku šādi:
var foo;
konsole.log (foo); // nenoteikts
foo = 2;
Pacelšanas laikā mainīgie atbilst JavaScript darbības jomas noteikumi. Javascript pacels mainīgo tikai tā tvēruma augšdaļā, kurā to deklarējāt. Mēģinot reģistrēt mainīgā vērtību ārpus tā deklarētās darbības jomas, tiks parādīts a Atsauces kļūda. Piemēram, ja deklarējat mainīgo funkcijā, tas nebūs redzams ārpus šīs jomas:
funkcijumyFunction() {
konsole.log (foo); // nenoteikts
var foo = 10;
}
myFunction();
konsole.log (foo); // ReferenceError: foo nav definēts
Mēģinot piekļūt mainīgajam ārpus tā darbības jomas, tiks parādīts a Atsauces kļūda.
let un const
Saskaņā ar MDN dokumentācija par ļaut un konst pacelšana, JavaScript paceļ arī mainīgos, kas deklarēti ar ļaut un konst atslēgvārdi. Tomēr atšķirībā no mainīgajiem, kas deklarēti ar var atslēgvārds, tie nav inicializēti ar an nenoteikts vērtību.
Piemēram:
funkcijumyFunction() {
konsole.log (foo); // nenoteikts
konsole.log (josla); // Atsauces kļūda: pirms inicializācijas nevar piekļūt joslai
konsole.log (baz); // Atsauces kļūda: nevar piekļūt 'baz' pirms inicializācijasvar foo = 5;
ļaut josla = 10;
konst baz = 15;
}
myFunction();
Jūs nevarat piekļūt mainīgajiem, kas deklarēti ar atslēgvārdiem let un const, pirms tie nav inicializēti ar vērtību.
Pacelšanas funkcijas
JavaScript pacēlāji darbojas līdzīgi mainīgajiem. Tāpat kā ar mainīgajiem lielumiem, tas ir atkarīgs no tā, kā jūs tos deklarējat. Piemēram, JavaScript paceļ funkciju deklarācijas atšķirīgi no funkciju izteiksmēm.
Funkcijas deklarācija ir funkcija, kas deklarēta ar nosaukumu, savukārt funkcijas izteiksme ir funkcija, kuras nosaukumu varat izlaist. Piemēram:
funkcijufoo() {
// funkcijas deklarācija
}
konst josla = () => {
// funkcijas izteiksme
}
JavaScript paceļ funkciju deklarācijas, bet ne funkciju izteiksmes. Piemēram:
foo (); // 5
bārs(); // Tipa kļūda: bar() nav funkcija// Funkcijas deklarācija
funkcijufoo() {
konsole.log(5);
}
// Funkciju izteiksme
var josla = funkcijuizteiksme() {
konsole.log(10);
};
Šis kods izsauc foo pirms to deklarēšanas un inicializācijas kā funkciju, taču tas joprojām tiek reģistrēts 5 uz konsoli. Tomēr mēģina sazvanīt bārs rezultātā a Tipa kļūda.
Pacelšanas vadība
Apzinoties pacelšanu un iespējamās kļūdas, kas varētu rasties, ja tās tiek pārvaldītas nepareizi, varat ietaupīt ilgas atkļūdošanas stundas. Šeit ir daži veidi, kā pārvaldīt pacelšanu.
Deklarējiet mainīgos funkcijās
Deklarē mainīgos lielumus funkcijās, kas tiem piekļūs. Jūs ne vienmēr varēsiet to izdarīt, jo jums var būt nepieciešams globāls mainīgais, kuram varat piekļūt vairākās funkcijās. Tāpēc noteikti deklarējiet mainīgos globāli tikai tad, ja tas patiešām ir nepieciešams.
Mainīgos deklarēt ar let vai const
Jums vienmēr vajadzētu izmantot let un const atslēgvārdi vietā var atslēgvārds, deklarējot mainīgos. Šī prakse ir noderīga, deklarējot lokālos mainīgos funkcijā. Zinot pareizos veidus, kā deklarēt mainīgos JavaScript samazina kļūdu iespējamību, ko izraisa jūsu koda pacelšana.
Deklarējiet mainīgos to darbības jomas augšdaļā
Deklarējiet visus savus mainīgos to attiecīgo tvērumu augšdaļā pirms citiem paziņojumiem. To darot, tiks nodrošināts, ka JavaScript kompilatoram nav jāpaceļ šie mainīgie, lai tiem piekļūtu.
Stingrā režīma izmantošana
Stingrais režīms ir JavaScript režīms kas regulē sliktu sintaksi, optimizē koda izpildes laiku un aizliedz ļaunprātīgi izmantot JavaScript brīvi ievadīto sintaksi, kompilēšanas laikā radot kļūdas.
Piemēram, pacelšanas dēļ “salietajā režīmā” varat piekļūt mainīgajam, kas atrodas ārpus inicializētās funkcijas, pat ja tas nav deklarēts:
myFunction();
konsole.log (foo); // 20
funkcijumyFunction() {
foo = 20;
}
Iepriekš esošajā koda blokā JavaScript automātiski deklarē foo un paceļ to globālā tvēruma augšdaļā, ignorējot tvērumu, kurā to inicializējāt.
Varat izmantot stingro režīmu, lai labotu šo darbību un radītu kļūdu, ja mēģināt piekļūt mainīgajam ārpus tā funkciju jomas.
Stingrais režīms neaptur pacelšanu pavisam. Tā vietā tas novērš mulsinošākos un kļūdainākos pacelšanas veidus. Joprojām ir svarīgi izprast vispārējo koncepciju un pacelšanas noteikumus, pat ja tiek izmantots stingrā režīma drošības tīkls.
Lai izvēlētos stingro režīmu globālā līmenī, skripta faila augšdaļā deklarējiet sintaksi:
"izmantotstingri"; // vai 'izmantotstingri'
Lai funkcijas līmenī izvēlētos stingru režīmu, pirms jebkādiem paziņojumiem deklarējiet sintaksi funkcijas pamatteksta augšdaļā:
funkcijumyStrictFunction() {
"izmantotstingri";
}
Ja funkcijas līmenī deklarējat stingro režīmu, iestatījums attieksies tikai uz paziņojumiem šīs funkcijas ietvaros.
Stingrā režīma deklarēšana globālā līmenī novērš piekļuvi mainīgajiem ārpus to attiecīgās jomas:
"izmantotstingri";
myFunction();
konsole.log (foo); // ReferenceError: foo nav definēts
funkcijumyFunction() {
foo = 20;
}
Ja ir ieslēgts stingrais režīms, tiks aktivizēts JavaScript kompilators myFunction() tā darbības jomas augšdaļā bez nedeklarētā mainīgā lieluma.
Izprotiet, kas ietekmē pacelšanu
Pacelšana ir diezgan unikāla valoda JavaScript, un tā var būt ļoti mulsinoša rīcība, lai aplauztu galvu. Tas var ietekmēt mainīgos lielumus un funkcijas, taču ir veidi, kā to novērst, ja nepieciešams.
Pacelšanu var ietekmēt vairāki faktori, tāpēc vislabāk ir izvairīties no mainīgo vai funkciju pacelšanas kodā.