منتدى رواية عشق

منتدى رواية عشق (http://www.r-eshq.com/vb/index.php)
-   ϟ تَطويـر المُنتديـات ϟ (http://www.r-eshq.com/vb/forumdisplay.php?f=52)
-   -   ما فائدة استعمال closure في جافا سكريبت (http://www.r-eshq.com/vb/showthread.php?t=219679)

Şøķåŕą 02-22-2023 09:03 PM

ما فائدة استعمال closure في جافا سكريبت
 
في جافا سكريبت، الإغلاق (closure) هو دالة تشير إلى متغيرات في النطاق الخارجي من نطاقها الداخلي، حيث يحافظ الإغلاق على النطاق الخارجي داخل نطاقه الداخلي، ولفهم عمليات الإغلاق، عليك أن تعرف كيف يعمل النطاق المعجمي (lexical scoping) أولاً.



كيفية تحديد النطاق المعجمي Lexical scoping


يحدد النطاق المعجمي نطاق المتغير من خلال موضع ذلك المتغير المعلن في كود المصدر، على سبيل المثال:




let name = ‘John’;

function greeting() {

let message = ‘Hi’;

console.log(message + ‘ ‘+ name);



}

في هذا المثال:



اسم المتغير هو متغير عام، يمكن الوصول إليه من أي مكان بما في ذلك وظيفة (() greeting).


(message) هي متغير محلي لا يمكن الوصول إليه إلا من خلال دالة (() greeting).





إذا حاولت الوصول إلى متغير (message) خارج وظيفة (() greeting)، فستتلقى خطأ، لذلك يستخدم محرك جافا سكريبت النطاق لإدارة إمكانية الوصول المتغيرة.



كيفية استعمال closure في جافا سكريبت


دعونا نعدل وظيفة (() greeting):



function greeting() {

let message = ‘Hi’;



function sayHi() {

console.log(message);


}

return sayHi;


}

let hi = greeting();

hi(); // still can access the message variable

الآن، بدلًا من تنفيذ دالة (()sayHi) داخل دالة (() greeting)، تُرجع دالة (() greeting) كائن دالة (()sayHi)، وخارج دالة (() greeting)، قمنا بتعيين متغير (hi) القيمة التي تم إرجاعها بواسطة دالة (() greeting)، وهي مرجع لوظيفة (()sayHi).


ثم قمنا بتنفيذ دالة (()sayHi) باستخدام مرجع تلك الوظيفة: (()hi)، إذا قمت بتشغيل الكود، فستحصل على نفس التأثير كما هو مذكور أعلاه، ومع ذلك، فإن النقطة المهمة هنا هي أنه عادةً يوجد متغير محلي فقط أثناء تنفيذ الوظيفة، هذا يعني أنه عند اكتمال تنفيذ وظيفة (() greeting)، لم يعد متغير (message) متاحًا.


في هذه الحالة، نقوم بتنفيذ الدالة (()hi) التي تشير إلى وظيفة (()sayHi)، ولا يزال متغير (message) موجودًا، رائع هذا هو الإغلاق، بمعنى آخر، وظيفة (()sayHi) هي إغلاق، فالإغلاق هو وظيفة تحافظ على النطاق الخارجي في نطاقها الداخلي.

ضامية الشوق 02-23-2023 09:24 AM

طرح جميل

eyes beirut 02-24-2023 03:42 PM

/


تسلم ايدك ع الطرح
يعتيك العافية

نبضها مطيري 02-26-2023 12:02 AM

طرح جميل
يعطيك العافيه

عٍشُق♡ 02-26-2023 07:27 AM

اِخْتِيَار مُرْفَقٍ بفآئِدةَ تكُنوِلوُجِيةَ . .
كُلُّ اَلشُّكْرِ لِهَذَا اَلْإِمْتَاعِ . .
تَحِيَّتِي لِوهُجِ إُبدِآعَكّ . .

نور القمر 02-26-2023 05:11 PM

طرحَ عَذب ..!!
أختيآر أنيق وحضور صآخب
سلة من الوردَ وآنحناءة شكر لسموك



الساعة الآن 07:37 PM

Powered by vBulletin Hosting By R-ESHQ
new notificatio by R-ESHQ
HêĽм √ 3.1 BY: ! ωαнαм ! © 2010
User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2024 DragonByte Technologies Ltd.
تنويه : المشاركات المطروحة تعبر عن وجهة نظر أصحابها وليس بالضرورة تمثل رأي أدارة الموقع