⊗jsPmFCPf 272 of 505 menu

JavaScriptda IIFEni chaqirishdagi shubhali jihatlar

Keling, ikkita kod bo'lagini ko'rib chiqaylik.

Birinchi:

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

Ikkinchi:

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

Ushbu ikkala kod bo'lagi deyarli bir xil, lekin ularni ishga tushirish natijasi har xil bo'ladi. Birinchi kod konsolga 3 sonini chiqaradi, ikkinchisi esa 1 sonini.

Nima uchun bunday farq paydo bo'ldi: barcha ish shundaki, bir holatda birinchi qatorda kod oxirida nuqta-vergul yo'q, ikkinchi holatda esa mavjud.

Siz so'rashingiz mumkin: bu qanday bo'lishi mumkin, axir JavaScriptda nuqta-vergul buyruq oxirida majburiy emas! Aslida bu butunlay shunday emas. Keling, aslida nima bo'layotganini aniq ko'rib chiqaylik.

Birinchi kodni shunday qayta yozish mumkin:

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

Endi darhol ayon bo'ladiki, birga funksiyani joyida chaqirish natijasi qo'shiladi, ya'ni 2. Shuning uchun yakuniy natija 3 bo'ladi.

Agar birdan keyin nuqta-vergul qo'yilsa, kod interpryator tomonidan boshqacha qabul qilinadi:

// Birinchi buyruq: let result = 1; // Ikkinchi buyruq: +function() { return 2; }(); // Uchinchi buyruq: console.log(result); // 1 ni chiqaradi

Ya'ni o'zgaruvchiga tayinlash va funksiyani joyida chaqirish turli buyruqlar bo'lib qoladi. Va barchasi nuqta-vergul mavjudligi tufayli!

Ma'lum bo'ladiki, bu holda funksiyani chaqirish umuman hech narsa qilmaydi - shunchaki hech qayerga 2 sonini qaytaradi, bu result o'zgaruvchisiga hech qanday ta'sir ko'rsatmaydi.

Keling, unda aniqlab olaylik, nega biz umuman JavaScriptda nuqta-vergul yozmasligimiz mumkin. Bizda nuqta-vergulsiz shunday kod bo'lsin:

let result = 1 // resultga 1 yoziladi let test = 2 // testga 2 yoziladi

U to'g'ri ishlaydi, chunki interpryator har bir qator oxiriga nuqta-vergulni o'zi qo'ydi.

Lekin shunday kodga qarang:

let result = 1 + 2; // resultga 3 yoziladi

Endi birinchi qator oxirida nuqta-vergul avtomatik ravishda qo'yilmaydi, chunki interpryator ikkinchi qatordagi buyruq bu birinchi qator buyrug'ining bir qismi ekanligini tushunadi.

Agar biz o'zimiz nuqta-vergul qo'ysak - natija butunlay boshqacha bo'ladi:

let result = 1; // resultga 1 yoziladi + 2; // buyruq hech narsa qilmaydi, lekin xato ham bo'lmaydi

Ma'lum bo'ladiki, interpryator nuqta-vergulni o'zi qo'yadi, faqat keyingi buyruq oldingisining bir qismi bo'lmasa.

Endi esa ushbu kodga qarang:

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

Darhaqiqat, ikkinchi qator - shunchaki birinchi qator buyrug'ining davomi va interpryator nuqta-vergulni avtomatik ravishda qo'ymaydi. Aynan shuning uchun, agar biz birinchi qator oxiriga nuqta-vergulni o'zimiz yozsak - natija butunlay boshqacha bo'ladi. Bu shuni ko'rsatadiki, muammolarning oldini olish uchun, kerakli joylarda har doim nuqta-vergul qo'yish eng yaxshisidir.

Oʻzbek
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекTiếng Việt
Biz sayt ishlashi, tahlil qilish va shaxsiylashtirish uchun cookie-fayllardan foydalanamiz. Ma'lumotlarni qayta ishlash Maxfiylik siyosatiga muvofiq amalga oshiriladi.
hammasini qabul qilish sozlash rad etish