ماهو Closure ؟ ومالفائدة منه ؟


وحتى نعرف شنو closure لازم نفهم بالبداية Scopes .
مفهوم scope يقصدون بي حدود الوصول للمتغير بمعنى ثاني المكان الي يحدد بي المتغير بحيث ما نقدر نوصله من خارجه اما برمجيا ممكن يكون كتلة من الكود Block of Code مثلا دالة او عبارات الشرط .. الخ .
بمعنى ثالث لو عرفنا متغير داخل دالة ، فهذا المتغير يسموه متغير محلي Locally ، بحيث ما ممكن نوصله من خارج الدالة ، لهذا الدالة تسمى هنا Scope .
بأغلب الحالات ممكن يكون عندك سكوبس متداخلة يعني واحدة داخل ثانية ، مثلا لو عندنا سكوب اسمها خارجية اسمها Outer وداخلها سكوب داخلية اسمها Inner بالتالي برمجيا من داخل السكوب Inner نوصل لأي متغير بالسكوب Outer ، بينما من خارج Inner ما نقدر نوصل لأي متغير داخل Inner وهذا يسموه بسكوب Lexical .
طيب وهذا شنو علاقته بال Closure ؟
ان Closure بالاصل عبارة عن دالة داخلية مثل inner بالمثال اعلاه ، لو فرضا الدالة Inner احتاجت قيم بمتغير موجود ب Outer فسوف تصل له حسب مفهوم Lexical طيب ماذا لو استدعينا ونفذنا الدالة Inner بداخل سكوب اخر خارج Outer شنو الي راح يصير ؟
الي يصير تبقى Inner عندها امكانية الوصول للمتغير الموجود ب Outer حتى لو تنفذت بسكوب ليس له علاقة ب Outer .
هذا هو مفهوم Closure ! طيب والفائدة منه ؟
يجعلك تفهم حالة المتغيرات من سكوبس مختلفة وبالتالي تسيطر عليها ويستخدم مع لغات البرمجة التي Functional Programming