De snelle tip van vandaag komt in antwoord op een vraag op Twitter over JavaScript 'hijsen'. Wat is het? Hoe werkt het? Wat moet je weten? Dit alles komt aan bod in deze beginnersgerichte les met basisprincipes.
Beschouw de volgende code:
var myvar = 'mijn waarde'; alert (myVar); // mijn waarde
Oké, natuurlijk zal de waarschuwing "mijn waarde" weergeven. Dat is duidelijk; blijf echter bij mij. Laten we vervolgens een onmiddellijke functie maken, die dezelfde waarde waarschuwt.
var myvar = 'mijn waarde'; (function () alert (myvar); // mijn waarde) ();
Oké, goed. Nog steeds duidelijk, ik weet het. Laten we nu een sleutel in de mix gooien en een lokale variabele maken binnen deze anonieme functie met dezelfde naam.
var myvar = 'mijn waarde'; (function () alert (myvar); // undefined var myvar = 'local value';) ();
Huh? Waarom wordt de waarschuwing nu weergegeven? onbepaald
? Ook al hebben we verklaard een nieuwe variabele, deze staat nog steeds onder de waarschuwing; dus het zou geen effect moeten hebben, juist? Fout.
Binnen het huidige bereik, ongeacht waar een variabele wordt gedeclareerd, wordt deze achter de schermen naar de top gehesen. Echter, alleen de verklaring
zal worden gehesen. Als de variabele ook is begonnen
, de huidige waarde, bovenaan het bereik, wordt in eerste instantie ingesteld op onbepaald
.
Oké, laten we het verschil tussen de termen ontcijferen, verklaring
en initialisatie
. Neem de volgende regel aan: var joe = 'loodgieter';
var joe; // de verklaring
joe = 'loodgieter'; // de initialisatie
Nu we de terminologie begrijpen, kunnen we gemakkelijker begrijpen wat er onder de motorkap gebeurt. Overweeg de volgende nep-functie.
(functie () var a = 'a'; // regels code var b = 'b'; // meer regels code var c = 'c'; // antipattern // laatste regels voor scripting) () ;
Verklaar alle variabelen bovenaan.
Merk op dat wat hierboven als voorbeeld wordt beschouwd als een slechte praktijk wordt beschouwd. Desalniettemin, achter de schermen, worden al die variabele verklaringen - ongeacht waar ze zich voordoen in de functieomvang - naar de top gehesen, zoals zo:
(functie () var a, b, c; // gedeclareerde variabelen a = 'a'; // regels code b = 'b'; // geïnitialiseerd // meer regels code c = 'c'; // geïnitialiseerde // laatste regels van scripting) ();
Als we nu terugkeren naar het oorspronkelijke verwarrende onbepaald
stuk code, van boven:
var myvar = 'mijn waarde'; (function () alert (myvar); // undefined var myvar = 'local value';) ();
Het zou nu volkomen logisch moeten zijn waarom myvar
is alert onbepaald.
Zoals we geleerd hebben, zo snel als de lokale variabele, myvar
, werd verklaard, werd het automatisch boven de functiemeter gehesen ... boven de waarschuwing. Als gevolg hiervan was de variabele al gedeclareerd op het moment van de waarschuwing; Omdat initialisaties echter niet worden opgehesen, is de waarde van de variabele: onbepaald
.