⊗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šuMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние користиме колачиња за работата на веб-страната, анализа и персонализација. Обработката на податоци се врши во согласност со Политиката за приватност.
прифати ги сите прилагоди одбиј