⊗jsPmFCPf 272 of 505 menu

Скрајдне камење IIFE у JavaScript-у

Хајде да погледамо два комада кода.

Први:

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

Други:

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

Ова два комада кода су практично иста, али ако се покрену - резултат ће бити другачији. Први код ће у конзолу исписати број 3, а други - број 1.

Зашто је настала таква разлика: све је ствар у томе што у једном случају у првом реду кода на крају недостаје тачка и зарез, а у другом случају - постоји.

Можете питати: како то, па у JavaScript-у тачка и зарез на крају команде није обавезна! Заправо то није баш сасвим тако. Хајде да схватимо, шта се у ствари дешава.

Први код можемо преписати овако:

let result = 1 + function() { return 2; }(); console.log(result); // исписаће 3

Сада одмах постаје очигледно да се јединици додаје резултат позивања функције на месту, односно 2. Зато ће крајњи резултат бити 3.

Ако се после јединице стави тачка и зарез, тада ће интерпретатор код другачије схватити:

// Прва команда: let result = 1; // Друга команда: +function() { return 2; }(); // Трећа команда: console.log(result); // исписаће 1

То јест, додељивање у променљиву и позив функције на месту постаће различите команде. И све због присуства тачке и зареза!

Испоставља се да у овом случају позив функције на месту уопште ништа не ради - једноставно у ништа враћа број 2, који никако не утиче на променљиву result.

Хајде онда да схватимо, а зашто уопште можемо да не пишемо тачку и зарез у JavaScript-у. Нек имамо овакав код без тачака и зареза:

let result = 1 // у result ће се уписати 1 let test = 2 // у test ће се уписати 2

Он ради коректно, јер је интерпретатор сам ставио на крају сваког реда тачку и зарез.

Али погледајте овакав код:

let result = 1 + 2; // у result ће се уписати 3

Сада се тачка и зарез на крају првог реда неће аутоматски поставити, јер интерпретатор разуме да је команда другог реда - то јест део команде првог реда.

Али ако ми сами ставимо тачку и зарез - резултат ће бити сасвим другачији:

let result = 1; // у result ће се уписати 1 + 2; // команда ништа не ради, али ни грешке неће бити

Испоставља се да интерпретатор сам ставља тачку и зарез, само ако следећа команда није део претходне.

А сада погледајте овај код:

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

Заиста, други ред - једноставно наставак команде првог реда и интерпретатор не ставља тачку и зарез аутоматски. Управо због тога, ако ми сами напишемо тачку и зарез на крају првог реда - резултат ће бити сасвим другачији. Ово говори о томе да је најбоље увек ставити тачку и зарез на потребним местима, како би се избегли проблеми.

Српски
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Користимо колачиће за рад сајта, аналитику и персонализацију. Обрада података се врши у складу са Политиком приватности.
прихвати све подеси одбиј