أي من المُتغيرات متاح؟
الأهمية: 5
الدالة makeWorker
أدناه تصنع دالة أخرى وتعيدها. هذه الدالة المُعادة يمكن مناداتها من أي مكان.
هل ستحصل على حق الوصول إلى المتغيرات الخارجية من موقع بنائها أم من موقع مناداتها أو من الاثنين؟
function makeWorker() {
let name = "Pete";
return function() {
alert(name);
};
}
let name = "John";
// create a function
let work = makeWorker();
// call it
work(); // what will it show?
أي قيمة سوف تظهر؟ “Pete” أم “John”؟
أفترض الآن بأنّ إجابة السؤال الثاني في أول الفصل ستكون جليّة.
دالة work()
في الشيفرة أدناه تأخذ الاسم name
من مكانه الأصل عبر إشارة البيئة المُعجمية الخارجية إليه:
إذًا، فالناتج هنا هو "Pete"
.
ولكن لو لم نكتب let name
في makeWorker()
فسينتقل البحث إلى خارج الدالة تلك ويأخذ القيمة العمومية كما نرى من السلسلة أعلاه. في تلك الحالة سيكون الناتج "John"
.