JavaScript heising forklart

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.


Full Screencast



Heising forklart

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.


Variabeldeklarasjoner er hevet

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';

Erklæring
 var joe; // erklæringen
initialisering
 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) ();

Aha Moment

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.