Dagens videosnabbtips kommer som svar på et spørsmål på Twitter, angående JavaScript "heising." Hva er det? Hvordan virker det? Hva trenger du å vite om det? Alt dette vil bli dekket i denne nybegynnerfokuserte grunnleggende leksjonen.
Vurder følgende kode:
var myvar = 'min verdi'; alert (minvar); // min verdi
Ok, selvfølgelig vil varselet vise "min verdi". Det er åpenbart; Hold deg imidlertid til meg. La oss neste skape en umiddelbar funksjon, som varsler samme verdi.
var myvar = 'min verdi'; (funksjon () alarm (myvar); // min verdi) ();
OK, okay. Fortsatt åpenbart, vet jeg. La oss nå kaste en skiftenøkkel inn i blandingen, og opprette en lokal variabel innenfor denne anonyme funksjonen med samme navn.
var myvar = 'min verdi'; (funksjon () alarm (myvar); // undefined var myvar = 'lokal verdi';) ();
Hu h? Hvorfor vises varselet nå udefinert
? Selv om vi har erklært en ny variabel, den er fortsatt under varsel; så det burde ikke ha effekt, rett? Feil.
Innenfor det nåværende omfanget, uansett hvor en variabel er erklært, blir det bak kulissene hevet til toppen. Men bare erklæring
vil heises. Hvis variabelen er også initialisert
, Nåværende verdi, øverst i omfanget, vil i utgangspunktet settes til udefinert
.
Ok, la oss tyde på forskjellen mellom vilkårene, erklæring
og initialisering
. Anta følgende linje: var joe = 'rørlegger';
var joe; // erklæringen
joe = 'rørlegger'; // initialiseringen
Nå som vi forstår terminologien, kan vi lettere forstå hva som skjer under hetten. Vurder følgende falske funksjon.
(funksjon () var a = 'a'; // kodelinjer var b = 'b'; // flere kodelinjer var c = 'c'; // antipattern // siste linjer for scripting) ;
Erklære alle variabler øverst.
Merk at det som er eksemplifisert ovenfor anses å være dårlig praksis. Uansett, bak kulissene, vil alle disse variabeldeklarasjonene - uansett hvor de forekommer i funksjonsomfanget - heises til toppen, slik som:
(funksjon () var a, b, c; // variabler erklært a = 'a'; // linjer med kode b = 'b'; // initialisert // flere kodelinjer c = 'c'; // initialisert // siste linjer med skripting) ();
Hvis vi nå kommer tilbake til den opprinnelige forvirrende udefinert
stykke kode, fra oven:
var myvar = 'min verdi'; (funksjon () alarm (myvar); // undefined var myvar = 'lokal verdi';) ();
Det burde nå gi perfekt mening hvorfor minvar
er advarsel udefinert.
Som vi lærte, så snart som den lokale variabelen, minvar
, ble erklært, det ble automatisk heistet til toppen av funksjonsområdet ... over varselet. Som et resultat hadde variabelen allerede blitt erklært ved varselet; men fordi initialiseringer ikke heises også, er verdien av variabelen: udefinert
.