⊗jsPmFCPf 272 of 505 menu

Zamke IIFE u JavaScript-u

Hajde da pogledamo dva isečka koda.

Prvi:

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

Drugi:

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

Ova dva isečka koda su skoro identična, ali ako se pokrenu - rezultat će se razlikovati. Prvi kod će ispisati u konzolu broj 3, a drugi - broj 1.

Zašto je došlo do takve razlike: stvar je u tome što u jednom slučaju na kraju prve linije koda nedostaje tačka-zarez, a u drugom slučaju - prisutan je.

Možete se zapitati: kako to, pa u JavaScript-u tačka-zarez na kraju komande nije obavezna! U stvari to nije sasvim tako. Hajde da shvatimo šta se zapravo dešava.

Prvi kod se može prepisati ovako:

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

Sada odmah postaje očigledno da se jedinici dodaje rezultat poziva funkcije na licu mesta, to jest 2. Zbog toga će konačni rezultat biti 3.

Ako se iza jedinice stavi tačka-zarez, onda će kod biti drugačije shvaćen od strane interpretera:

// Prva komanda: let result = 1; // Druga komanda: +function() { return 2; }(); // Treća komanda: console.log(result); // ispisaće 1

To jest, dodela u promenljivu i poziv funkcije na licu mesta postaće različite komande. A sve zbog prisustva tačka-zareza!

Ispada da u ovom slučaju poziv funkcije na licu mesta uopšte ništa ne radi - jednostavno u ništa vraća broj 2, koji nikako ne utiče na promenljivu result.

Hajde onda da shvatimo, a zašto uopšte možemo da ne pišemo tačka-zarez u JavaScript-u. Neka imamo ovakav kod bez tačka-zareza:

let result = 1 // u result će se upisati 1 let test = 2 // u test će se upisati 2

On radi ispravno, pošto je interpreter sam stavio na kraju svake linije tačka-zarez.

Ali pogledajte ovakav kod:

let result = 1 + 2; // u result će se upisati 3

Sada se tačka-zarez na kraju prve linije neće automatski postaviti, pošto interpreter razume da je komanda druge linije - to deo komande prve linije.

Ali ako mi sami stavimo tačka-zarez - rezultat će biti potpuno drugačiji:

let result = 1; // u result će se upisati 1 + 2; // komanda ne radi ništa, ali neće biti ni greške

Ispada da interpreter sam stavlja tačka-zarez, samo ako sledeća komanda nije deo prethodne.

A sada pogledajte ovaj kod:

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

Zaista, druga linija - je samo nastavak komande prve linije i interpreter ne stavlja tačka-zarez automatski. Upravo zato, ako mi sami napišemo tačka-zarez na kraju prve linije - rezultat će biti potpuno drugačiji. Ovo govori o tome da je najbolje uvek staviti tačka-zarez na potrebnim mestima, kako bismo izbegli probleme.

Srpski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Koristimo kolačiće za rad sajta, analitiku i personalizaciju. Obrada podataka se vrši u skladu sa Politikom privatnosti.
prihvati sve podesi odbij