أحدث البرامج التعليمية وتطوير الشبكة
×

JS البرنامج التعليمي

JS الصفحة الرئيسية JS المقدمة JS ألى أين JS الناتج JS بناء الجملة JS البيانات JS تعليقات JS المتغيرات JS مشغلي JS علم الحساب JS مهمة JS أنواع البيانات JS وظائف JS الأجسام JS نطاق JS أحداث JS سلاسل JS طرق سلسلة JS أرقام JS طرق عدد JS الرياضيات JS التمور JS تاريخ تنسيقات JS تاريخ طرق JS المصفوفات JS طرق مجموعة JS القيم المنطقية JS مقارنات JS الظروف JS تحول JS حلقة غيرمنتهية For JS حلقة بينما JS استراحة JS نوع التحويل JS التعبير العادي JS أخطاء JS التصحيح JS الرفع JS الوضع الصارم JS دليل الاناقة JS أفضل الممارسات JS الأخطاء JS أداء JS الكلمات المحجوزة JS JSON

JS أشكال

أشكال التحقق من صحة API أشكال

JS موضوع

تعريفات الكائن خصائص الكائن طرق كائن نماذج الكائن

JS وظائف

تعاريف وظيفة وظيفة المعلمات وظيفة الاحتجاج الإغلاق وظيفة

JS HTML DOM

DOM مقدمة DOM أساليب DOM وثيقة DOM عناصر DOM HTML DOM CSS DOM الرسوم المتحركة DOM أحداث DOM EventListener DOM ملاحة DOM العقد DOM Nodelist

JS المتصفح BOM

JS Window JS Screen JS Location JS History JS Navigator JS Popup Alert JS Timing JS Cookies

JS أمثلة

JS أمثلة JS HTML DOM JS HTML إدخال JS HTML الأجسام JS HTML أحداث JS المتصفح JS اختبار قصير JS ملخص

JS المراجع

JavaScript الأجسام HTML DOM الأجسام


 

JavaScript Closures


يمكن المتغيرات جافا سكريبت تنتمي إلى النطاق المحلي أو العالمي.

المتغيرات خاصة يمكن إجراء ممكن مع الإغلاق.


المتغيرات العالمية

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

مثال

function myFunction() {
    var a = 4;
    return a * a;
}
انها محاولة لنفسك »

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

مثال

var a = 4;
function myFunction() {
    return a * a;
}
انها محاولة لنفسك »

في المثال الأخير، وهو غير متغير عمومي.

في صفحة على شبكة الإنترنت، والمتغيرات العالمية تنتمي إلى كائن الإطار.

المتغيرات العالمية ويمكن استخدام (وتغيرت) من قبل جميع النصوص في الصفحة (وفي الإطار).

في المثال الأول، وهو غير متغير محلي.

لا يمكن إلا أن المتغير المحلي استخدامها داخل وظيفة حيث يتم تعريفه. كان مخفيا من الوظائف الأخرى وغيرها من التعليمات البرمجية النصية.

المتغيرات العالمية والمحلية بنفس الاسم هي المتغيرات المختلفة. تعديل واحد، لا يغير من جهة أخرى.

المتغيرات التي تم إنشاؤها دون الكلمة فار، دائما العالمي، حتى لو أنها يتم إنشاؤها داخل دالة.


عمر متغير

المتغيرات العالمية ويعيش ما دام طلبك (نافذة / صفحة الويب الخاصة بك) يعيش.

المتغيرات المحلية لها حياة قصيرة. يتم إنشاؤها عند استدعاء الدالة، وحذفها عند الانتهاء من وظيفة.


معضلة عداد

افترض أنك تريد استخدام متغير لحساب شيء، وأنت تريد هذا العداد لتكون متاحة لجميع الوظائف.

هل يمكن استخدام المتغير العالمي، وظيفة إلى زيادة العداد:

مثال

var counter = 0;

function add() {
    counter += 1;
}

add();
add();
add();

// the counter is now equal to 3
انها محاولة لنفسك »

يجب تغيير العداد فقط من add() وظيفة.

المشكلة هي أن أي برنامج نصي على الصفحة يمكن تغيير العداد، دون استدعاء add() .

إذا أعلن العداد داخل وظيفة، لا أحد سيكون قادرا على تغييره دون استدعاء إضافة ():

مثال

function add() {
    var counter = 0;
    counter += 1;
}

add();
add();
add();

// the counter should now be 3, but it does not work !
انها محاولة لنفسك »

إنها لا تعمل! في كل مرة أسميه add() وظيفة، يتم تعيين العداد إلى 1.

وظيفة الداخلية جافا سكريبت يمكن أن تحل هذه.


وظائف جافا سكريبت متداخلة

جميع وظائف من الحصول على نطاق عالمي.

في الواقع، في جافا سكريبت، جميع وظائف من الوصول إلى نطاق "فوق" لهم.

جافا سكريبت تدعم وظائف متداخلة. وظائف متداخلة من الوصول إلى نطاق "فوق" لهم.

في هذا المثال، وظيفة الداخلية plus() لديه حق الوصول إلى متغير العداد في وظيفة الوالد:

مثال

function add() {
    var counter = 0;
    function plus() {counter += 1;}
    plus();   
    return counter;
}
انها محاولة لنفسك »

هذا يمكن أن تحل معضلة مضادة، وإذا لم نتمكن من الوصول إلى plus() وظيفة من الخارج.

ونحن بحاجة أيضا إلى إيجاد وسيلة لتنفيذ مكافحة = 0 مرة واحدة فقط.

نحن بحاجة إلى إغلاق.


جافا سكريبت الإغلاق

تذكر ظائف استدعاء النفس؟ ماذا تفعل هذه الوظيفة؟

مثال

var add = (function () {
    var counter = 0;
    return function () {return counter += 1;}
})();

add();
add();
add();

// the counter is now 3
انها محاولة لنفسك »

وأوضح مثال

يتم تعيين الوظيفة متغير قيمة الإرجاع من الوظائف استدعاء النفس.

وظيفة استدعاء ذاتي يعمل مرة واحدة فقط. ويحدد العداد إلى الصفر (0)، وإرجاع التعبير وظيفة.

تصبح هذه الطريقة إضافة وظيفة. و"رائع" جزء هو أنه لا يمكن الوصول إلى وصفة طبية في نطاق الأم.

وهذا ما يسمى إغلاق جافا سكريبت. فإنه يجعل من الممكن لوظيفة أن يكون المتغيرات "خاصة".

محمي العداد من قبل نطاق وظيفة غير معروفة، ويمكن تغييرها فقط باستخدام وظيفة الإضافة.

والإغلاق هو الوصول ظيفة الحاجة إلى نطاق الوالدين، حتى بعد إغلاق وظيفة الأم.