Qaysi o'zgaruvchilar mavjud?
Quyidagi makeWorker
funktsiyasi boshqa funktsiya yaratadi va uni qaytaradi. O’sha yangi funktsiya boshqa joydan chaqirilishi mumkin.
U o’zining yaratilgan joyidagi tashqi o’zgaruvchilarga, yoki chaqirilgan joyidagiga, yoki ikkala joyidagiga ham kirish huquqiga ega bo’ladimi?
function makeWorker() {
let name = "Pete";
return function () {
alert(name);
};
}
let name = "John";
// funktsiya yaratish
let work = makeWorker();
// uni chaqirish
work(); // nima ko'rsatadi?
Qaysi qiymatni ko’rsatadi? “Pete” yoki “John”?
Javob: Pit.
Quyidagi koddagi “work()” funksiyasi tashqi leksik muhit havolasi orqali kelib chiqqan joydan “nom” oladi:
Demak, natija bu erda "Pit"
.
Ammo agar makeWorker()
da let name
bo’lmasa, qidiruv tashqariga chiqib, yuqoridagi zanjirdan ko’rib turganimizdek global o’zgaruvchini oladi. Bunday holda, natija “Jon” bo’ladi.