English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
يمكن أن تنتمي متغيرات JavaScript إلىالمحليةالمجال أوالعالميةالمجال
يمكن استخدامclosureتعيين متغيرات عالمية كمحلية (خاصة).
افترض أننا نريد استخدام متغير لحساب شيء ما ونريد أن يكون المعديل متاحًا لجميع الدوال.
يمكننا استخدام متغير عالمي ودالة لزيادة المعديل:
// تحديد المعديل مغير counter = 0; // دالة تعديل المعديل function increment() { counter++; } // استدعاء increment() ثلاث مرات increment(); increment(); increment(); // الآن يجب أن يكون المعديل 3 document.getElementById("output").innerHTML = `عدد: ${counter};`;اختبار لرؤية‹/›
يوجد مشكلة في الحل السابق: يمكن تعديل أي كود على الصفحة لتغيير معديل دون الحاجة إلى استدعاء increment().
يمكن للدوال الداخلية في JavaScript حل هذه المشكلة.
يدعم JavaScript الدوال المدمجة. يمكن للدوال المدمجة الوصول إلى النطاق فوقها.
في هذا المثال، يمكن للدالة الداخلية الوصول إلى متغير حساب الدالة الخارجية:
دالة outer() { مغير counter = 0; دالة inner() { counter++; } إرجاع counter; }اختبار لرؤية‹/›
الدوال المدمجة يمكنها حل المشكلة السابقة إذا كان بإمكاننا الوصول إلى الدالة inner() من الخارج.
نحتاج أيضًا إلى العثور على طريقة تنفيذ counter = 0 مرة واحدة فقط، وهي القفازات التي سنتحدث عنها لاحقًا.
القفازات هي مزيج من الدالة وبيئة النطاق اللفظية التي تم تعريفها بها.
القفازات يمكنها الوصول إلى متغيرات نطاق دالة أخرى. هذا يتم من خلال إنشاء دالة داخل دالة. بالطبع، لا يمكن للدالة الخارجية الوصول إلى النطاق الداخلي.
مغير increment = (دالة() { مغير counter = 0; دالة inner() { إرجاع ++counter; } إرجاع inner; ))اختبار لرؤية‹/›
قيمت العودة للميزة الذاتية مخصصة لزيادة المعامل.
الميزة الذاتية تعمل مرة واحدة فقط. إنها تضبط معامل الحساب إلى صفر وتعيد تعبير الدالة.
القفازات يمكنها الوصول إلى بيئة النطاق الأم حتى بعد إغلاقها.