Ondergrondse klippe van IIFE in JavaScript
Kom ons kyk na twee stukke kode.
Die eerste:
let result = 1
+function() {
return 2;
}();
console.log(result);
Die tweede:
let result = 1;
+function() {
return 2;
}();
console.log(result);
Hierdie twee stukke kode is byna identies,
maar as jy dit uitvoer, sal die resultaat verskil.
Die eerste kode sal die nommer 3 na die konsole uitvoer,
en die tweede - die nommer 1.
Hoekom is daar so 'n verskil: dit gaan alles oor die feit dat in die een geval aan die einde van die eerste reël van die kode daar geen kommapunt is nie, en in die tweede geval - is daar een.
Jy mag vra: hoe kan dit wees, want in JavaScript is die kommapunt aan die einde van 'n opdrag nie verpligtend nie! Dit is eintlik nie heeltemal so nie. Kom ons vind uit wat regtig gebeur.
Die eerste kode kan so herskryf word:
let result = 1 + function() {
return 2;
}();
console.log(result); // sal 3 uitvoer
Nou word dit dadelik duidelijk dat by
die een die resultaat van die onmiddellike aanroep van die funksie
bygetel word, dit wil sê 2. Daarom sal die finale
resultaat 3 wees.
As jy egter 'n kommapunt na die een plaas, sal die kode anders deur die interpreteerder verstaan word:
// Eerste opdrag:
let result = 1;
// Tweede opdrag:
+function() {
return 2;
}();
// Derde opdrag:
console.log(result); // sal 1 uitvoer
Dit wil sê die toekenning aan die veranderlike en die aanroep van die funksie op sy plek sal verskillende opdragte word. En dit alles as gevolg van die teenwoordigheid van 'n kommapunt!
Dit blyk dat in hierdie geval die onmiddellike aanroep van die funksie
glad niks doen nie - dit gee net
die nommer 2 terug nêrens na toe, wat
geen effek op die veranderlike result het nie.
Kom ons probeer dan uitvind, hoekom ons uberhaupt nie 'n kommapunt in JavaScript hoef te skryf nie. Laat ons sulke kode sonder kommapunte hê:
let result = 1 // in result sal 1 geskryf word
let test = 2 // in test sal 2 geskryf word
Dit werk korrek, aangesien die interpreteerder self aan die einde van elke reël 'n kommapunt geplaas het.
Maar kyk na hierdie kode:
let result = 1
+ 2; // in result sal 3 geskryf word
Nou sal die kommapunt aan die einde van die eerste reël nie outomaties geplaas word nie, aangesien die interpreteerder verstaan dat die opdrag van die tweede reël - dit is 'n deel van die opdrag van die eerste reël.
Maar as ons self 'n kommapunt plaas - sal die resultaat heeltemal anders wees:
let result = 1; // in result sal 1 geskryf word
+ 2; // die opdrag doen niks, maar daar sal ook geen fout wees nie
Dit blyk dat die interpreteerder self 'n kommapunt plaas, slegs as die volgende opdrag nie 'n deel van die vorige een is nie.
En kyk nou na hierdie kode:
let result = 1
+function() {
return 2;
}();
console.log(result);
Inderdaad, die tweede reël - is net 'n voortsetting van die opdrag van die eerste reël en die interpreteerder plaas nie outomaties 'n kommapunt nie. Dis hoekom, as ons self 'n kommapunt aan die einde van die eerste reël skryf - die resultaat heeltemal anders sal wees. Dit wys dat dit die beste is om altyd 'n kommapunt op die nodige plekke te plaas, om probleme te voorkom.