⊗jsPmFCPf 272 of 505 menu

Pasti IIFE v JavaScript

Oglejmo si dva koda odlomka.

Prvi:

let result = 1 +function() { return 2; }(); console.log(result);

Drugi:

let result = 1; +function() { return 2; }(); console.log(result);

Ta dva koda odlomka sta skoraj enaka, vendar če jih zaženemo - bo rezultat drugačen. Prva koda bo v konzolo izpisala številko 3, druga pa številko 1.

Zakaj je prišlo do takšne razlike: vse je v tem, da v enem primeru v prvi vrstici koda na koncu manjka podpičje, v drugem primeru pa je prisotno.

Lahko vprašate: kako je to mogoče, saj v JavaScript pika podpičje na koncu ukaza ni obvezno! Pravzaprav to ni čisto tako. Ugotovimo, kaj se nam pravzaprav dogaja.

Prvo kodo lahko prepišemo takole:

let result = 1 + function() { return 2; }(); console.log(result); // izpiše 3

Zdaj takoj postane očitno, da k enici prištejemo rezultat klica funkcije na mestu, to je 2. Zato bo končni rezultat 3.

Če pa za enico postavimo podpičje, bo interpreter kodo razumel drugače:

// Prvi ukaz: let result = 1; // Drugi ukaz: +function() { return 2; }(); // Tretji ukaz: console.log(result); // izpiše 1

To pomeni, da bosta dodelitev v spremenljivko in klic funkcije na mestu postala različna ukaza. In vse zaradi prisotnosti podpičja!

Izkazalo se je, da v tem primeru klic funkcije na mestu pravzaprav ne naredi nič - preprosto v nič vrne številko 2, ki na spremenljivko result ne vpliva na noben način.

Potem pa ugotovimo, zakaj sploh lahko ne pišemo podpičja v JavaScript. Recimo, da imamo takšno kodo brez podpičij:

let result = 1 // v result se zapiše 1 let test = 2 // v test se zapiše 2

Deluje pravilno, saj je interpreter sam na koncu vsake vrstice postavil piko s podpičjem.

A poglejte si takšno kodo:

let result = 1 + 2; // v result se zapiše 3

Zdaj se podpičje na koncu prve vrstice ne postavi samodejno, saj interpreter razume, da je ukaz druge vrstice - to del ukaza prve vrstice.

A če sami postavimo podpičje - bo rezultat povsem drugačen:

let result = 1; // v result se zapiše 1 + 2; // ukaz ne naredi nič, a tudi napake ne bo

Izkazalo se je, da interpreter sam postavi piko s podpičjem, le če naslednji ukaz ni del prejšnjega.

In zdaj poglejte si to kodo:

let result = 1 +function() { return 2; }(); console.log(result);

Res, druga vrstica - je preprosto nadaljevanje ukaza prve vrstice in interpreter ne postavi podpičja samodejno. Prav zato, če sami napišemo piko s podpičjem na koncu prve vrstice - bo rezultat povsem drugačen. To nakazuje, da je najbolje vedno postaviti piko s podpičjem na pravih mestih, da se izognemo težavam.

Slovenščina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Za delovanje spletnega mesta, analitiko in personalizacijo uporabljamo piškotke. Obdelava podatkov poteka v skladu s Politiko zasebnosti.
sprejmi vse nastavi zavrni