JavaScript-däki IIFE-niň suwasty kemçilikleri

Iki kod bölegine seredeliň.

Birinjisi:

javascriptlet netije = 1
+function() {
  return 2;
}();

console.log(netije);

Ikinjisi:

javascriptlet 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:

javascriptlet 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:

javascript// 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:

javascriptlet 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ň:

javascriptlet 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:

javascriptlet 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ň:

javascriptlet 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.