⊗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हिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართული한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Біз сайттың жұмысы, аналитика және персонализация үшін cookie файлдарын қолданамыз. Деректерді өңдеу Құпиялылық саясаты бойынша жүреді.
барлығын қабылдау баптау қабылдамау