⊗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ščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Мы выкарыстоўваем cookie для працы сайта, аналітыкі і персаналізацыі. Апрацоўка дадзеных адбываецца згодна Палітыкай канфідэнцыяльнасці.
прыняць усе наладзіць адхіліць