Cititorii ca tine ajută la sprijinirea MUO. Când efectuați o achiziție folosind link-uri de pe site-ul nostru, este posibil să câștigăm un comision de afiliat.
Hoisting este un mecanism JavaScript care vă permite să accesați variabile și funcții înainte de a le inițializa. Aruncarea unei astfel de declarații o mută efectiv în vârful domeniului de aplicare.
Aflați totul despre cum funcționează ridicarea în JavaScript și despre cum să o gestionați cel mai bine pentru a evita erorile în codul dvs.
Variabile de ridicare Cu var, let și const
Încărcarea este posibilă deoarece JavaScript utilizează sistemul de compilare JIT (Just-in-Time), care vă scanează codul pentru a identifica toate variabilele din domeniile lor respective.
Compilatorul JIT ridică apoi toate cazurile de declarații de variabile în partea de sus a domeniului lor la compilare. JavaScript ridică doar declarații de variabile, nu inițializările acestora.
Comportamentul variabilelor, atunci când sunt ridicate, depinde de cuvântul cheie cu care le declarați, deoarece fiecare cuvânt cheie se comportă diferit.
var
Accesarea unei variabile neinițializate declarată cu var cuvântul cheie va reveni nedefinit. De exemplu:
consolă.log (foo); // nedefinit
var foo = 2;
Jurnalele de cod de mai sus nedefinit pentru că cheamă console.log înainte de a inițializa variabila.
Compilatorul JavaScript vede blocul de cod anterior astfel:
var foo;
consolă.log (foo); // nedefinit
foo = 2;
În timpul ridicării, variabilele respectă regulile de acoperire JavaScript. Javascript va ridica doar o variabilă în partea de sus a domeniului în care ați declarat-o. Încercarea de a înregistra valoarea unei variabile în afara domeniului ei declarat va avea ca rezultat a ReferenceError. De exemplu, dacă declarați o variabilă în interiorul unei funcții, aceasta nu va fi vizibilă în afara acestui domeniu:
funcţiemyFunction() {
consolă.log (foo); // nedefinit
var foo = 10;
}
myFunction();
consolă.log (foo); // ReferenceError: foo nu este definit
Încercarea de a accesa o variabilă în afara domeniului său de aplicare va avea ca rezultat un ReferenceError.
lasa si const
In conformitate cu MDN documentatie privind lăsa și const ridicarea, JavaScript ridică, de asemenea, variabilele declarate cu lăsa și const Cuvinte cheie. Cu toate acestea, spre deosebire de variabilele declarate cu var cuvânt cheie, nu sunt inițializate cu un nedefinit valoare.
De exemplu:
funcţiemyFunction() {
consolă.log (foo); // nedefinit
consolă.log (bară); // ReferenceError: Nu se poate accesa „bara” înainte de inițializare
consolă.log (baz); // ReferenceError: Nu se poate accesa „baz” înainte de inițializarevar foo = 5;
lăsa bara = 10;
const baz = 15;
}
myFunction();
Nu puteți accesa variabilele declarate cu cuvintele cheie let și const înainte de a le inițializa cu o valoare.
Funcții de ridicare
Încărcările JavaScript funcționează în mod similar cu variabilele. Ca și în cazul variabilelor, depinde de modul în care le declarați. De exemplu, JavaScript ridică declarațiile de funcție diferit de expresiile de funcție.
O declarație de funcție este o funcție declarată cu un nume, în timp ce o expresie de funcție este o funcție al cărei nume îl puteți omite. De exemplu:
funcţiefoo() {
// declarația funcției
}
const bara = () => {
// expresia funcției
}
JavaScript ridică declarații de funcție, dar nu și expresii de funcție. De exemplu:
foo(); // 5
bar(); // TypeError: bar() nu este o funcție// Declarație de funcție
funcţiefoo() {
consolă.Buturuga(5);
}
// Expresia funcției
var bara = funcţieexpresie() {
consolă.Buturuga(10);
};
Acest cod sună foo înainte de a o declara și inițializa ca funcție, dar încă se înregistrează 5 la consolă. Totuși, încercând să sune bar rezultă într-o Eroare de scris.
Gestionarea ridicării
A fi conștienți de ridicare și de potențialele erori care ar putea apărea dacă sunt gestionate greșit vă poate economisi ore lungi de depanare. Iată câteva modalități prin care puteți gestiona ridicarea.
Declarați variabile în interiorul funcțiilor
Declarați variabile în interiorul funcțiilor care le vor accesa. Nu veți putea întotdeauna să faceți acest lucru, deoarece este posibil să aveți nevoie de o variabilă globală pe care o puteți accesa în mai multe funcții. Așa că asigurați-vă că declarați variabilele la nivel global doar dacă aveți nevoie cu adevărat.
Declarare variabile cu let sau const
Ar trebui să utilizați întotdeauna let și const cuvinte cheie în loc de var cuvânt cheie la declararea variabilelor. Această practică este benefică atunci când se declară variabile locale în interiorul unei funcții. Cunoașterea modalităților adecvate de a declara variabile în JavaScript reduce șansele de erori cauzate de ridicarea care apar în codul dvs.
Declarați variabile în partea de sus a domeniului lor de aplicare
Declarați toate variabilele dvs. în partea de sus a domeniilor lor respective, înainte de orice alte instrucțiuni. Procedând astfel, compilatorul JavaScript nu trebuie să ridice acele variabile pentru a le accesa.
Utilizarea modului strict
Modul strict este un mod JavaScript care reglementează sintaxa slabă, optimizează timpul de rulare a codului dvs. și interzice abuzul de sintaxă scrisă vag a JavaScript, aruncând erori în timpul compilării.
De exemplu, în „modul neglijent”, din cauza ridicării, puteți accesa o variabilă în afara funcției inițializate, chiar dacă nu a fost declarată:
myFunction();
consolă.log (foo); // 20
funcţiemyFunction() {
foo = 20;
}
În blocul de cod de mai sus, JavaScript declară automat foo și îl ridică în partea de sus a domeniului global, ignorând domeniul în care l-ați inițializat.
Puteți utiliza modul strict pentru a remedia acest comportament și a arunca o eroare dacă încercați să accesați variabila în afara domeniului său de aplicare.
Modul strict nu oprește ridicarea completă. În schimb, previne cele mai confuze și predispuse la erori de ridicare. Este încă important să înțelegeți conceptul general și regulile din spatele ridicării, chiar și atunci când utilizați plasa de siguranță în modul strict.
Pentru a opta pentru modul strict la nivel global, declarați sintaxa din partea de sus a fișierului script:
"utilizarestrict"; // sau 'utilizarestrict'
Pentru a opta pentru modul strict la nivel de funcție, declarați sintaxa din partea de sus a corpului funcției înainte de orice instrucțiuni:
funcţiemyStrictFunction() {
"utilizarestrict";
}
Dacă declarați modul strict la nivel de funcție, setarea se va aplica numai declarațiilor din acea funcție.
Declararea modului strict la nivel global împiedică accesarea variabilelor în afara domeniilor lor respective:
"utilizarestrict";
myFunction();
consolă.log (foo); // ReferenceError: foo nu este definit
funcţiemyFunction() {
foo = 20;
}
Cu modul strict activat, compilatorul JavaScript se va ridica myFunction() în partea de sus a domeniului său de aplicare fără variabila nedeclarată.
Înțelegeți ce afectează ridicarea
Ridicarea este unică pentru JavaScript și poate fi un comportament foarte confuz pentru a vă învălui. Poate afecta variabile și funcții, dar există modalități de a o preveni dacă este necesar.
Mai mulți factori pot afecta ridicarea, așa că cel mai bine este să evitați orice apariție a ridicării variabilelor sau a funcției în codul dvs.