Funksiyalar nomlar fazosi (namespace) sifatida

Funksiya ichida e'lon qilingan o'zgaruvchilar funksiya tashqarisida "ko'rinmaydi". Aynan shu sababli, ba'zan global nomlar fazosini ortiqcha o'zgaruvchilar bilan "ifloslantirmasdan" ishlash uchun funksiyadan shunchaki vaqtinchalik nomlar fazosi sifatida foydalanish maqsadga muvofiq bo'ladi.

Tasavvur qiling, sizda bir nechta turli JavaScript dasturlarida (yoki klient tomonidagi JavaScript uchun, bir nechta turli veb-sahifalarda) ishlatmoqchi bo'lgan bir kod qismi bor. Faraz qilaylik, bu kod, ko'plab kodlar kabi, o'z hisob-kitoblarining oraliq natijalarini saqlash uchun o'zgaruvchilar yaratadi. Muammo shundaki, bu kod qismi ko'plab turli dasturlarda ishlatilishi sababli, u yaratadigan o'zgaruvchilar uni ishlatadigan dasturlar tomonidan yaratilgan o'zgaruvchilar bilan ziddiyatga (conflict) kirishish-kirishmasligini bilmaysiz.

Yechim — bu kod qismini funksiya ichiga joylashtirish va so'ngra o'sha funksiyani chaqirishdir. Bu usulda, global bo'lishi mumkin bo'lgan o'zgaruvchilar funksiya uchun lokal bo'lib qoladi:

Bu kod faqat bitta global o'zgaruvchini hosil qiladi: chunkNamespace funksiya nomini. Agar hatto bitta nom yaratish ham ko'plik qilsa, anonim funksiyani bitta ifodada ham yaratib, ham chaqirib ketishingiz mumkin:

Funksiyani bitta ifodada yaratish va chaqirishning bu usuli shunchalik ko'p ishlatiladiki, u idiomatik holatga kelgan va unga "darhol chaqiriladigan funksiya ifodasi" (immediately invoked function expression yoki IIFE) nomi berilgan. Oldingi kod misolidagi qavslarning ishlatilishiga e'tibor bering. function'dan oldingi ochuvchi qavs majburiydir, chunki u bo'lmasa, JavaScript interpretatori function kalit so'zini funksiya e'lon qilish ko'rsatmasi sifatida tahlil qilishga harakat qiladi. Qavs bilan esa, interpretator buni to'g'ri, funksiya ta'rifi ifodasi sifatida taniydi. Boshidagi qavs, shuningdek, bu funksiyani o'qiydigan inson uchun ham funksiya keyinroq ishlatish uchun emas, balki darhol chaqirilish uchun yaratilayotganini anglashga yordam beradi.

Funksiyalardan nomlar fazosi sifatida foydalanish, biz nomlar fazosi funksiyasi ichida o'sha fazodagi o'zgaruvchilardan foydalangan holda bir yoki bir nechta funksiya yaratib, so'ngra ularni nomlar fazosi funksiyasining qaytariladigan qiymati sifatida tashqariga uzatganimizda, haqiqatan ham o'zining to'liq qudratini namoyon etadi. Bunday funksiyalar closure'lar deb nomlanadi va ular keyingi bo'limning mavzusidir.