أسرار الـ Closures في JavaScript #جافا_كريبت #برمجة #تطوير_الويب
فورتك ستور (4Tech)
0:00 / 0:00
أسرار الـ Closures في JavaScript #جافا_كريبت #برمجة #تطوير_الويب
6 просмотров · 8 дн. назад
فورتك ستور (4Tech)
1,92 тыс. подписчиков
6 просмотров · 8 дн. назад
الـ Closure هي دالة مرتبطة ببيئتها النطاقية عند الإنشاء فتتذكر المتغيرات الخارجية. وفق دليل MDN، makeAdder ينتج add5 و add10، والنتيجة المتوقعة
12 وهذا يوضح أن كل استدعاء يحمل نسخة خاصة من النطاق المحيط به فقط نستخدم مصانع الدال مثل makeAdder لإنشاء بيئات مختلفة لكل استدعاء، حيث تحتفظ كل دالة داخلية بمرجع للمتغيرات التي ارتبطت بها عند إنشائها، مما يضمن استقلال كل نسخة ناتجة وتذكر القيمة الأصلية للمعامل x طوال دورة حياتها دون تداخل بينها تعتمد سلسلة النطاق Scope Chain على وصول الدالة الداخلية للمستويات المتعددة، حيث تبحث عن المتغيرات في نطاقها المحلي أولاً ثم تنتقل تدريجياً للنطاقات الخارجية حتى تجد القيمة المطلوبة، وهذا يخلق سلسلة بحث متصلة بين الدوال المتداخلة في JavaScript دائماً الـ Closure يحتفظ بقيم المتغيرات من لحظة الإنشاء وليس من لحظة الاستدعاء فالبيئة النطاقية تُحفظ مع الدالة في الذاكرة وفق دليل MDN سلسلة النطاقات في sum توضح ذلك بوضوح حيث sum(1)(2)(3)(4) تطبع 20 وهذا يثبت تذكر القيم الأصلية تماماً من الأخطاء الشائعة الخلط بين نطاق التعريف Lexical Scope ونطاق وقت الاستدعاء، ف الـ Closure يعتمد دائماً على مكان كتابة الكود وتعريفه وليس المكان الذي تم فيه استدعاء الدالة الفعلي، وهذا يمنع السلوك الديناميكي غير المتوقع في التنفيذ يمكن استخدام الـ Closure لإنشاء دوال خاصة Private Methods غير قابلة للوصول من الخارج. عبر IIFE يُحفظ privateCounter داخل نطاق مغلق وتُرجع طرق increment و decrement و value التي تصل إليه فقط والنتيجة المتوقعة 1 تماماً تمرين عملي: قم بإنشاء دالة مضاعفة Multiplier تستخدم مفهوم الـ Closure، بحيث تأخذ عاملاً معيناً وتُعيد دالة أخرى تضرب أي رقم تستقبله في ذلك المعامل، مع الحفاظ على المعامل في نطاقها. في النهاية، تكمن أهمية الـ Closure في الحفاظ على الحالة State وإدارة البيانات بشكل آمن، حيث يمنحك القدرة على بناء هياكل برمجية قوية تحافظ على بياناتها الخاصة بعيداً عن تداخل المتغيرات العامة في البرنامج.
#جافا_كريبت #برمجة #تطوير_الويب