شبيبة تعليمي

شبيبة المنزل مقدمة شبيبة شبيبة إلى أين إخراج JS بيانات شبيبة بناء جملة JS تعليقات JS متغيرات JS JS Let شبيبة كونست مشغلي JS شبيبة الحساب احالة JS أنواع بيانات JS وظائف JS كائنات JS أحداث شبيبة سلاسل شبيبة طرق سلسلة JS بحث سلسلة JS JS String Templates أرقام شبيبة طرق عدد JS صفيفات JS طرق صفيف JS ترتيب صفيف JS تكرار صفيف JS JS Array Const تواريخ شبيبة تنسيقات التاريخ JS طرق الحصول على تاريخ JS طرق تعيين تاريخ JS شبيبة الرياضيات شبيبة عشوائية شبيبة منطقية مقارنات شبيبة شروط JS مفتاح JS JS Loop For JS Loop For In. شبيبة حلقة JS لـ Of شبيبة حلقة بينما شبيبة استراحة شبيبة تكرارات مجموعات JS خرائط شبيبة شبيبة تايبوف JS نوع التحويل شبيبة Bitwise JS RegExp أخطاء JS شبيبة النطاق رفع JS وضع JS الصارم شبيبة هذه الكلمة دالة سهم JS فئات JS شبيبة شبيبة تصحيح أخطاء JS دليل أسلوب JS أفضل ممارسات JS أخطاء JS أداء JS شبيبة الكلمات المحجوزة

إصدارات JS

إصدارات JS JS 2009 (ES5) شبيبة 2015 (ES6) شبيبة 2016 شبيبة 2017 شبيبة 2018 شبيبة آي إي / إيدج تاريخ شبيبة

كائنات JS

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

وظائف JS

تعريفات الوظائف معلمات الوظيفة استدعاء الوظيفة استدعاء الوظيفة تطبيق الوظيفة عمليات إغلاق الوظائف

فئات JS

مقدمة عن الفصل الوراثة الطبقية فئة ثابتة

شبيبة آسينك

عمليات الاسترجاعات JS شبيبة غير متزامن وعود شبيبة شبيبة Async / انتظار

JS HTML DOM

مقدمة DOM طرق DOM مستند DOM عناصر DOM DOM HTML نماذج DOM DOM CSS الرسوم المتحركة DOM أحداث DOM مستمع أحداث DOM التنقل في DOM عقد DOM مجموعات DOM قوائم عقدة DOM

متصفح JS BOM

نافذة JS شاشة JS موقع JS تاريخ شبيبة شبيبة ملاح تنبيه منبثق لـ JS توقيت شبيبة ملفات تعريف الارتباط JS

JS Web APIs

مقدمة واجهة برمجة تطبيقات الويب واجهة برمجة تطبيقات نماذج الويب واجهة برمجة تطبيقات سجل الويب واجهة برمجة تطبيقات تخزين الويب Web Worker API واجهة برمجة تطبيقات جلب الويب واجهة برمجة تطبيقات تحديد الموقع الجغرافي على الويب

شبيبة أجاكس

مقدمة أجاكس أجاكس XMLHttp طلب AJAX استجابة AJAX ملف AJAX XML أجاكس بي إتش بي أجاكس آسيا والمحيط الهادئ قاعدة بيانات أجاكس تطبيقات أجاكس أمثلة AJAX

شبيبة شبيبة

مقدمة JSON بناء جملة JSON JSON مقابل XML أنواع بيانات JSON تحليل JSON تنسيق JSON كائنات JSON صفائف JSON خادم JSON JSON PHP JSON HTML جسون جسونب

JS مقابل jQuery

محددات jQuery jQuery HTML jQuery CSS jQuery DOM

شبيبة الرسومات

شبيبة الرسومات قماش شبيبة شبيبة بلوتلي JS Chart.js مخطط جوجل JS شبيبة D3.js

أمثلة JS

أمثلة JS JS HTML DOM إدخال JS HTML كائنات JS HTML أحداث HTML متصفح JS محرر JS تمارين شبيبة شبيبة مسابقة شهادة JS

مراجع JS

كائنات جافا سكريبت كائنات HTML DOM


إغلاق JavaScript


يمكن أن تنتمي متغيرات JavaScript إلى النطاق المحلي أو العام .

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


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

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

مثال

function myFunction() {
  let a = 4;
  return a * a;
}

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

مثال

let a = 4;
function myFunction() {
  return a * a;
}

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

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

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

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

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

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

تكون المتغيرات التي تم إنشاؤها بدون كلمة أساسية للإعلان ( var، letأو const) دائمًا عامة ، حتى لو تم إنشاؤها داخل دالة.

مثال

function myFunction() {
  a = 4;
}


عمر متغير

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

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


معضلة مضادة

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

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

مثال

// Initiate counter
let counter = 0;

// Function to increment counter
function add() {
  counter += 1;
}

// Call add() 3 times
add();
add();
add();

// The counter should now be 3

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

يجب أن يكون العداد محليًا add()للوظيفة ، لمنع الكود الآخر من تغييره:

مثال

// Initiate counter
let counter = 0;

// Function to increment counter
function add() {
  let counter = 0;
  counter += 1;
}

// Call add() 3 times
add();
add();
add();

//The counter should now be 3. But it is 0

لم ينجح لأننا نعرض العداد العالمي بدلاً من العداد المحلي.

يمكننا إزالة العداد العام والوصول إلى العداد المحلي عن طريق السماح للوظيفة بإرجاعها:

مثال

// Function to increment counter
function add() {
  let counter = 0;
  counter += 1;
  return counter;
}

// Call add() 3 times
add();
add();
add();

//The counter should now be 3. But it is 1.

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

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


وظائف JavaScript المتداخلة

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

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

يدعم JavaScript الوظائف المتداخلة. الوظائف المتداخلة لها حق الوصول إلى النطاق "أعلاه" منهم.

في هذا المثال ، يمكن للدالة الداخلية plus()الوصول إلى counterالمتغير في الوظيفة الأصلية:

مثال

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

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

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

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


إغلاق JavaScript

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

مثال

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

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

// the counter is now 3

شرح المثال

يتم تعيين المتغير addإلى القيمة المرجعة لدالة استدعاء ذاتي.

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

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

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

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

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