JavaScript-däki IIFE-niň suwasty kemçilikleri
Iki kod bölegine seredeliň.
Birinjisi:
let netije = 1
+function() {
return 2;
}();
console.log(netije);
Ikinjisi:
let netije = 1;
+function() {
return 2;
}();
console.log(netije);
Bu iki kod bölegi takmynan birmeňzeş,
ýöne olary işletseňiz, netije tapawutly bolar.
Birinji kod konsola 3 sanyny çykarar,
ikinjisi bolsa 1 sanyny.
Bu tapawut nämä görä ýüze çykdy: bolşuny, bir ýagdaýda birinji setir kodunyň ahyrynda nokatli çykgýç ýok, ikinji ýagdaýda bolsa bar.
Sorap bilersiňiz: nähili, sebäbi JavaScriptde buýrugyň ahyryndaky nokatli çykgýç hökmany däl! Aslynda bu örän hem däl. Hakykatda näme bolýanyny anyklalyň.
Birinji kody şeýle ýazyp bolýar:
let netije = 1 + function() {
return 2;
}();
console.log(netije); // 3 çykarar
Indi ýene-de aýdyň görünýär, bire
ýerinde çagyrylýan funksiýanyň netijesi
goşulýar, ýagny 2. Şonuň üçin jemi
netije 3 bolar.
Biriň yzyna nokatli çykgýç goýulsa, kod interpretator tarapyndan başgaça kabul ediler:
// Birinji buýruk:
let netije = 1;
// Ikinji buýruk:
+function() {
return 2;
}();
// Üçünji buýruk:
console.log(netije); // 1 çykarar
Ýagny üýtgeýjä bellik we ýerinde funksiýa çagyrmak dürli buýruklar bolar. Hemmeleri nokatli çykgýçyň bolmagy üçin!
Demek, bu ýagdaýda ýerinde funksiýa çagyrmak
umuman hiç zat etmeýär - diňe
ýere 2 sanyny gaýtaryp,
netije üýtgeýjisine hiç hili täsir etmeýär.
Onda düşüneliň, näme üçin biz JavaScriptde nokatli çykgýç ýazmasak hem bolýar. Görkezilen ýaly nokatli çykgýçsyz kod bolsun:
let netije = 1 // netije-e 1 ýazylar
let synag = 2 // synag-a 2 ýazylar
Ol dogry işleýär, sebäbi interpretator her setiriň ahyryna özi nokatli çykgýç goýýar.
Ýöne şu koda serediň:
let netije = 1
+ 2; // netije-e 3 ýazylar
Indi birinji setiriň ahyrynda nokatli çykgýç awtomatik goýulmaz, sebäbi interpretator ikinji setiriň buýrugynyň birinji setiriň buýrugynyň bölegi diýip düşünýär.
Ýöne özümiz nokatli çykgýç goýsaňyz - netije gaty başgaca bolar:
let netije = 1; // netije-e 1 ýazylar
+ 2; // buýruk hiç zat etmeýär, ýöne ýalňyş hem bolmaz
Demek, interpretator özi nokatli çykgýç goýýar, diňe indiki buýruk öňküsiň bölegi bolmasa.
Indi bu koda serediň:
let netije = 1
+function() {
return 2;
}();
console.log(netije);
Hakykatdanam, ikinji setir - diňe birinji setiriň buýrugynyň dowamy we interpretator nokatli çykgýçy awtomatik goýmaýar. Şonuň üçin, eger birinji setiriň ahyryna özümiz nokatli çykgýç ýazsaňyz - netije ýene-de başgaca bolar. Bu şuny aňladýar, problemalardan gaça durmak üçin, gerek ýerlerde hemişe nokatli çykgýç goýmak has gowy.