في عالم يفقد السيطرة 🌀 عالم البرمجة لك

borma logo
person




فيه مفاهيم في JavaScript لو فهمتها صح مش بس هتحترف اللغة لأ هتكتب كود أسرع وأكفأ وأكتر احترافية باذن الله.

 

في المحاضرة دي هنتعلم:

  • يعني إيه Scope؟ وإزاي بيتحكم في الوصول للمتغيرات؟
  • إيه هو Closure؟ وليه بيعتبر من أقوى مفاهيم JavaScript؟
  • إزاي بتؤثر Closures و Scope على الأداء؟ وإزاي تتجنب المشاكل؟

📌 1- يعني إيه Scope في JavaScript؟

Scope هو اللي بيحددلك إيه المتغيرات اللي تقدر توصلها من مكان معين في الكود.

أنواع الـ Scope في JavaScript:

  • Global Scope – أي متغير متعرف بره أي دالة، بيبقى متاح في أي مكان في الكود.
  • Function Scope – أي متغير جوه فانكشن، مش هتقدر توصله من بره الفانكشن.
  • Block Scope (introduced in ES6) – أي متغير متعرف بـ let أو const جوه {} مش هيخرج بره.
  • Lexical Scope – الكود جوه فانكشن بيشوف المتغيرات اللي فوقه في السلسلة، لكن العكس مش صحيح

مثال سريع على Scope:

الفانكشن تقدر توصل للمتغيرات اللي بره لكن الكود الخارجي مش يقدر يوصل لجواها

 

📌 2- يعني إيه Closures؟

Closure هو لما تكون الفانكشن عندها access للـ Scope اللي اتعرفت فيه حتى بعد تنفيذ الفانكشن الأم

 مثال عملي على Closure:

innerFunction لسه تقدر تشوف outerValue حتى بعد ما outerFunction خلص تنفيذها

 

📌 3- تأثير Closures و Scope على الأداء

🔹 مميزات Closures:

  • بتحافظ على القيم حتى بعد انتهاء تنفيذ الفانكشن الأصلية.
  • مفيدة جدا في Data Encapsulation (إخفاء البيانات).
  • بتستخدم في الـ Callbacks والـ Event Handlers.

🔹 مشاكل الأداء اللي ممكن تحصل:

  • استهلاك الذاكرة – لو استخدمت Closures بشكل خاطئ المتغيرات هتفضل محفوظة في الذاكرة بدون داعي.
  • Memory Leaks – لو احتفظت بـ References لبيانات مش محتاجها، ده ممكن يسبب تسريبات في الذاكرة.

🔹 تحسين الأداء عند استخدام Closures:

  • حاول تفرّغ المتغيرات اللي مش محتاجها بعد الاستخدام.
  • تجنب إنشاء Closures بدون داعي داخل الحلقات.
  • استخدم WeakMap لو بتحتفظ ببيانات مؤقتة.

📌 4- تطبيق عملي – صنع Counter باستخدام Closure

لاحظ إن count محفوظ داخل Closure ومش يقدر أي حد يوصله مباشرة

 

🎯 تـــاســك عــمــلــي

🔹 المطلوب:

  • اكتب فانكشن createBankAccount(initialBalance) ترجع Object فيه deposit و withdraw.
  • كل مرة يتم استدعاء deposit() يزيد الرصيد، وكل مرة withdraw() ينقص.
  • اتأكد إن الرصيد غير متاح من الخارج مباشرة

 📢 متنساش تسيب حلك في الكومنتات

قسم التعليقات