کدام متغیرها در دسترس هستند؟
اهمیت: 5
تابع makeWorker
پایین یک تابع دیگر میسازد و آن را برمیگرداند. تابع جدید میتواند در جایی دیگر فراخوانی شود.
این تابع به متغیرهای بیرون از جایی که ساخته شد دسترسی خواهد داشت یا جایی که فراخوانی میشود یا هر دو؟
function makeWorker() {
let name = "Pete";
return function() {
alert(name);
};
}
let name = "John";
// ساخت یک تابع
let work = makeWorker();
// فراخوانی آن
work(); // چه چیزی نمایش خواهد داد؟
کدام مقدار را نمایش خواهد داد؟ “Pete” یا “John”؟
جواب: Pete.
تابع work()
در کد زیر name
را از طریق مرجع محیط لغوی بیرونی، از جایی که منشا گرفته است دریافت میکند:
پس اینجا نتیجه "Pete"
است.
اما اگر let name
در makeWorker()
وجود نداشت، همانطور که در زنجیره بالا هم میبینیم، سپس جستجو به بیرون میرفت و متغیر گلوبال را دریافت میکرد. در این صورت نتیجه "John"
میشد.