⊗jsPmFCPf 272 of 505 menu

IIFE spąstai JavaScript

Panagrinėkime du kodo pavyzdžius.

Pirmasis:

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

Antrasis:

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

Šie du kodo pavyzdžiai yra beveik identiški, bet paleidus juos - rezultatas skirsis. Pirmasis kodas atspausdins konsolėje skaičių 3, o antrasis - skaičių 1.

Kodėl atsirado toks skirtumas: visa tai dėl to, kad vienu atveju pirmosios eilutės pabaigoje nėra kabliataškio, o antruoju atveju - yra.

Galite paklausti: kaip gi taip, juk JavaScript kabliataškis komandos pabaigoje nėra privalomas! Tiesą sakant, tai nėra visiškai taip. Išsiaiškinkime, kas iš tikrųjų vyksta.

Pirmąjį kodą galima perrašyti taip:

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

Dabar iškart tampa akivaizdu, kad prie vieneto pridedamas funkcijos iškart vykdyto rezultatas, tai yra 2. Todėl galutinis rezultatas bus 3.

Jei po vieneto dedamas kabliataškis, kodas bus interpretuojamas kitaip:

// Pirma komanda: let result = 1; // Antra komanda: +function() { return 2; }(); // Trečia komanda: console.log(result); // atspausdins 1

Tai yra, priskyrimas į kintamąjį ir funkcijos iškart vykdymas taps skirtingomis komandomis. Ir vis dėl kabliataškio buvimo!

Pasirodo, kad šiuo atveju funkcijos iškart vykdymas nieko nepadaro - tiesiog į nieką grąžina skaičių 2, kuris niekaip neveikia kintamojo result.

Tada išsiaiškinkime, kodėl apskritai galime nerašyti kabliataškio JavaScript. Tarkime, turime tokį kodą be kabliataškių:

let result = 1 // į result įrašomas 1 let test = 2 // į test įrašomas 2

Jis veikia korektiškai, nes interpretatorius patys pastatė kiekvienos eilutės pabaigoje kabliataškį.

Bet pažvelkite į tokį kodą:

let result = 1 + 2; // į result įrašomas 3

Dabar kabliataškis pirmosios eilutės pabaigoje nebus automatiškai dedamas, nes interpretatorius suvokia, kad antrosios eilutės komanda - tai pirmosios eilutės komandos dalis.

Bet jei mes patys pastatysime kabliataškį - rezultatas bus visiškai kitoks:

let result = 1; // į result įrašomas 1 + 2; // komanda nieko nedaro, bet ir klaidos nebus

Pasirodo, kad interpretatorius pats deda kabliataškį, tik jei kita komanda nėra ankstesnės dalis.

O dabar pažvelkite į šį kodą:

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

Iš tiesų, antroji eilutė - tiesiog tęsinys pirmosios eilutės komandos ir interpretatorius nededa kabliataškio automatiškai. Būtent todėl, jei mes patys parašysime kabliataškį pirmosios eilutės pabaigoje - rezultatas bus visiškai kitoks. Tai rodo, kad geriausia visada dėti kabliataškį reikiamose vietose, kad išvengtumėte problemų.

Lietuvių
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mes naudojame slapukus svetainės veikimui, analizei ir personalizavimui. Duomenų apdorojimas vyksta pagal Privatumo politiką.
priimti visus nustatyti atšaukti