⊗jsPmFCPf 272 of 505 menu

JavaScript-ում IIFE-ի թաքնված խնդիրները

Դիտարկենք կոդի երկու հատված:

Առաջինը.

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हिन्दीMagyarIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Մենք օգտագործում ենք cookie-ներ կայքի աշխատանքի, վերլուծության և անհատականացման համար։ Տվյալների մշակումը կատարվում է համաձայն Գաղտնիության քաղաքականության։
ընդունել բոլորը կարգավորել մերժել