darsga qaytish

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.