English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

دليل تعليمات JavaScript الأساسية

أوبجكتات JavaScript

دوال JavaScript

JS HTML DOM

JS محطة الإنترنت BOM

دليل تعليم AJAX الأساسي

دليل مرجع JavaScript

القفازات في JavaScript

يمكن أن تنتمي متغيرات JavaScript إلىالمحليةالمجال أوالعالميةالمجال

يمكن استخدامclosureتعيين متغيرات عالمية كمحلية (خاصة).

لماذا نحتاج إلى closure؟

افترض أننا نريد استخدام متغير لحساب شيء ما ونريد أن يكون المعديل متاحًا لجميع الدوال.

يمكننا استخدام متغير عالمي ودالة لزيادة المعديل:

// تحديد المعديل
مغير counter = 0;
// دالة تعديل المعديل
function increment() {
  counter++;
}
// استدعاء increment() ثلاث مرات
increment();
increment();
increment();
// الآن يجب أن يكون المعديل 3
document.getElementById("output").innerHTML = `عدد: ${counter};`;
اختبار لرؤية‹/›

يوجد مشكلة في الحل السابق: يمكن تعديل أي كود على الصفحة لتغيير معديل دون الحاجة إلى استدعاء increment().

يمكن للدوال الداخلية في JavaScript حل هذه المشكلة.

دوال مدمجة في JavaScript

يدعم JavaScript الدوال المدمجة. يمكن للدوال المدمجة الوصول إلى النطاق فوقها.

في هذا المثال، يمكن للدالة الداخلية الوصول إلى متغير حساب الدالة الخارجية:

دالة outer() {
  مغير counter = 0;
  دالة inner() {
      counter++;
  }
  إرجاع counter; 
}
اختبار لرؤية‹/›

الدوال المدمجة يمكنها حل المشكلة السابقة إذا كان بإمكاننا الوصول إلى الدالة inner() من الخارج.

نحتاج أيضًا إلى العثور على طريقة تنفيذ counter = 0 مرة واحدة فقط، وهي القفازات التي سنتحدث عنها لاحقًا.

القفازات في JavaScript

القفازات هي مزيج من الدالة وبيئة النطاق اللفظية التي تم تعريفها بها.

القفازات يمكنها الوصول إلى متغيرات نطاق دالة أخرى. هذا يتم من خلال إنشاء دالة داخل دالة. بالطبع، لا يمكن للدالة الخارجية الوصول إلى النطاق الداخلي.

مغير increment = (دالة() {
  مغير counter = 0;
  دالة inner() {
      إرجاع ++counter;
  }
  إرجاع inner;
))
اختبار لرؤية‹/›

قيمت العودة للميزة الذاتية مخصصة لزيادة المعامل.

الميزة الذاتية تعمل مرة واحدة فقط. إنها تضبط معامل الحساب إلى صفر وتعيد تعبير الدالة.

القفازات يمكنها الوصول إلى بيئة النطاق الأم حتى بعد إغلاقها.