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

JavaScript

Ichkaridan tashqariga qarash mumkin, teskarisi — yo’q. Bu bir tomonlama oyna kabi.

Blok scope — let va const

JavaScript

let va const blokda qamalgan, var esa emas — aynan shu sabab o’zgaruvchilar darsida var tavsiya qilinmagan edi.

Sikldagi farq yanada aniqroq:

JavaScript

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:

JavaScript

"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:

JavaScript

hisoblagichYarat allaqachon tugadi, lekin soni yo’qolmadi — qaytarilgan funksiya uni ushlab turibdi. Bu closure.

Har chaqiruv alohida muhit yaratadi:

JavaScript

b noldan boshladi — a bilan hisobi umumiy emas.

Nima uchun kerak — yopiq ma’lumot

Closure o’zgaruvchini tashqaridan himoyalaydi:

JavaScript

Oxirgi qator undefinedbalans ga faqat qaytarilgan uch metod orqali tegish mumkin. Tekshiruvlarni aylanib o’tib bo’lmaydi.

Sozlanadigan funksiya yasash

JavaScript

Bitta shablon — bir nechta tayyor funksiya. Har biri o’z n ini eslab qolgan.

Bir marta bajariladigan funksiya

JavaScript

Ikkinchi chaqiruvda “Hisoblanmoqda” chiqmadi — natija closure’da saqlangan.

Amaliy mashq

  1. Funksiya ichida o’zgaruvchi yaratib, tashqaridan o’qishga urinib ko’ring;
  2. if bloki ichida let va var e’lon qilib, farqini kuzating;
  3. hisoblagich yaratuvchi funksiya yozing va ikki nusxa oling;
  4. closure bilan yopiq balans saqlaydigan obyekt tuzing;
  5. kopaytiruvchi(5) kabi sozlanadigan funksiya yasang;
  6. var li siklni setTimeout bilan 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/const blokda 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.

Bu dars foydali bo'ldimi?

marta ko'rildi