JavaScript scope va closure
O’zgaruvchi qayerda ko’rinadi va qachon yo’qoladi? Bu savolga scope javob beradi. Uning ustiga qurilgan closure esa JavaScript’dagi eng kuchli tushunchalardan biri.
Scope — ko’rinish sohasi
Ichkaridan tashqariga qarash mumkin, teskarisi — yo’q. Bu bir tomonlama oyna kabi.
Blok scope — let va const
let va const blokda qamalgan, var esa emas — aynan shu sabab
o’zgaruvchilar darsida var tavsiya
qilinmagan edi.
Sikldagi farq yanada aniqroq:
var uchta 3 chiqardi — sikl tugagach barcha callback’lar bitta
o’zgaruvchini ko’rdi. let esa har aylanish uchun yangi nusxa yaratdi.
Lexical scope
Funksiya qayerda yozilganiga qarab tashqi o’zgaruvchilarni ko’radi — qayerdan chaqirilganiga emas:
"tashqi" chiqdi: korsat global darajada yozilgan, shuning uchun global
nom ni ko’radi.
Closure — yopilma
Endi asosiy g’oya. Funksiya tashqi o’zgaruvchini eslab qoladi, hatto tashqi funksiya tugagandan keyin ham:
hisoblagichYarat allaqachon tugadi, lekin soni yo’qolmadi — qaytarilgan
funksiya uni ushlab turibdi. Bu closure.
Har chaqiruv alohida muhit yaratadi:
b noldan boshladi — a bilan hisobi umumiy emas.
Nima uchun kerak — yopiq ma’lumot
Closure o’zgaruvchini tashqaridan himoyalaydi:
Oxirgi qator undefined — balans ga faqat qaytarilgan uch metod orqali
tegish mumkin. Tekshiruvlarni aylanib o’tib bo’lmaydi.
Sozlanadigan funksiya yasash
Bitta shablon — bir nechta tayyor funksiya. Har biri o’z n ini eslab
qolgan.
Bir marta bajariladigan funksiya
Ikkinchi chaqiruvda “Hisoblanmoqda” chiqmadi — natija closure’da saqlangan.
Amaliy mashq
- Funksiya ichida o’zgaruvchi yaratib, tashqaridan o’qishga urinib ko’ring;
ifbloki ichidaletvavare’lon qilib, farqini kuzating;- hisoblagich yaratuvchi funksiya yozing va ikki nusxa oling;
- closure bilan yopiq
balanssaqlaydigan obyekt tuzing; kopaytiruvchi(5)kabi sozlanadigan funksiya yasang;varli siklnisetTimeoutbilan yozib, nega uchta bir xil son chiqishini tushuntiring.
6-qadam scope va closure bog’liqligini yaxshi ko’rsatadi.
Qisqacha xulosa
- Scope — o’zgaruvchi ko’rinadigan hudud: global, funksiya, blok.
- Ichkaridan tashqariga ko’rinadi, tashqaridan ichkariga — yo’q.
let/constblokda qamaladi,var— yo’q.- Lexical scope: funksiya yozilgan joyiga qarab ko’radi.
- Closure — funksiya tashqi o’zgaruvchini tugagandan keyin ham eslaydi.
- Closure yopiq ma’lumot va sozlanadigan funksiyalar uchun ishlatiladi.
Keyingi darsda this kalit so’zi — kontekst qanday aniqlanishi haqida.