1. تنقسم سلسلة نطاق وظائف JavaScript إلى سلسلة نطاق وقت التعريف وسلسلة نطاق وقت التشغيل؛
2. عندما يتم تعريف وظيفة، فإنها تحتوي على سمة [[نطاق]] تشير إلى سلسلة نطاق التعريف الخاصة بها. تتبع سلسلة نطاق التعريف [[النطاق]] القواعد التالية: سلسلة نطاق تعريف الوظيفة [[ النطاق]] هي دائمًا. سلسلة نطاق التنفيذ للوظيفة الخارجية التي تقع فيها؛
3. تحتوي سلسلة نطاق التعريف للوظيفة العامة على سمات النافذة فقط؛
4. عند تنفيذ وظيفة، يتم دائمًا دفع سلسلة النطاق إلى الكائن النشط الحالي في رأس سلسلة النطاق عند تعريفها (تحتوي على هذا والوسائط والمعلمات والمتغيرات المحلية)؛
5. عند تنفيذ دالة، يتم دائمًا البحث عن عنونة المتغير من أعلى سلسلة النطاق إلى الأسفل، وبالتالي، تكون سرعة معالجة المتغيرات العامة هي الأبطأ؛
6. عند تنفيذ الوظيفة الداخلية، لا يزال بإمكانه الوصول إلى سلسلة نطاقها الكاملة. ولهذا السبب يمكن لعمليات الإغلاق الوصول إلى المتغيرات المحددة بواسطة الوظائف الخارجية المكتملة في وقت التشغيل؛
7. عند مواجهة عبارة with أثناء تنفيذ الوظيفة، سيتم دفع جميع سمات الكائن المحدد بـ مؤقتًا إلى أعلى سلسلة النطاق باعتبارها الجزء العلوي من سلسلة النطاق؛
8. عندما يواجه تنفيذ الوظيفة صيدًا، سيتم دفع كائن الخطأ المحدد بواسطة الصيد مؤقتًا إلى أعلى سلسلة النطاق باعتباره الجزء العلوي من سلسلة النطاق؛
دعونا نعطي مثالا ونرسم سلسلة النطاق لتعميق الفهم:
هناك مثل هذا الجزء من التعليمات البرمجية:
انسخ رمز الكود كما يلي:
وظيفة إسناد الأحداث () {
معرف فار = "xdi9592";
document.getElementById("save-btn").onclick = function(event){
saveDocument(id);
};
}
قم باستدعاء الإغلاق المجهول الذي تم إنشاؤه بواسطة هذه الوظيفة Closure، وارسم الشكل التالي لإظهار سلسلة النطاق عند تنفيذ signEvent وسلسلة النطاق عند تعريف Closure: