اذهب إلى المحتوى
  • 0

كيف يعمل إغلاق الدوال Closure في جافاسكريبت؟

Roog Roog

السؤال

function multiplier(factor) {
 return number => number * factor;
}
let twice = multiplier(2);
console.log(twice(5));
// 10 

ممكن شرح كيف العدد ٥ اخد مطرح number وعلى اساسا جرت عملية الضرب والناتج صار ١٠  .

شكرا مسبقا .

تم التعديل في بواسطة Mustafa Suleiman
تعديل عنوان السؤال
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

الدالة `multiplier` هي دالة عالية الرتبة (higher-order function) في JavaScript. تستقبل هذه الدالة عامل (factor)وتُرجع دالة جديدة.

let twice = multiplier(2);

عند استدعاء `multiplier(2)`، يتم تمرير العامل 2 إلى الدالة وتُرجع دالة جديدة. تلك الدالة الجديدة تسمى `twice` في هذا السياق.

عند استدعاء `twice(5)`، يتم تمرير العدد 5 إلى الدالة `twice`. وفقًا للدالة `multiplier` التي تم استخدامها لإنشاء `twice`، فإن الدالة `twice` تقوم بضرب العدد الممرر إليها (العدد 5 في هذه الحالة) بالعامل الذي تم تمريره لـ `multiplier` (العامل 2 في هذه الحالة).

بالتالي، يتم تنفيذ العبارة `number => number * factor` في `twice`، حيث يُقدر العدد الممرر إليها (5) ضمن المعامل `number`، ويتم ضربه بالعامل (2)، وبالتالي يتم إرجاع الناتج النهائي الذي هو 10.

باختصار، الدالة `twice` التي تم إنشاؤها باستخدام `multiplier(2)` تأخذ عددًا وتقوم بضربه بالعدد 2، وتُرجع الناتج. في هذه الحالة، `twice(5)` يعود بقيمة 10.

وللمزيد حول الدوال العليا يفضل قراءة المقالة التالية

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 26 دقائق مضت قال عبدالباسط ابراهيم:

الدالة `multiplier` هي دالة عالية الرتبة (higher-order function) في JavaScript. تستقبل هذه الدالة عامل (factor)وتُرجع دالة جديدة.

let twice = multiplier(2);

عند استدعاء `multiplier(2)`، يتم تمرير العامل 2 إلى الدالة وتُرجع دالة جديدة. تلك الدالة الجديدة تسمى `twice` في هذا السياق.

عند استدعاء `twice(5)`، يتم تمرير العدد 5 إلى الدالة `twice`. وفقًا للدالة `multiplier` التي تم استخدامها لإنشاء `twice`، فإن الدالة `twice` تقوم بضرب العدد الممرر إليها (العدد 5 في هذه الحالة) بالعامل الذي تم تمريره لـ `multiplier` (العامل 2 في هذه الحالة).

بالتالي، يتم تنفيذ العبارة `number => number * factor` في `twice`، حيث يُقدر العدد الممرر إليها (5) ضمن المعامل `number`، ويتم ضربه بالعامل (2)، وبالتالي يتم إرجاع الناتج النهائي الذي هو 10.

باختصار، الدالة `twice` التي تم إنشاؤها باستخدام `multiplier(2)` تأخذ عددًا وتقوم بضربه بالعدد 2، وتُرجع الناتج. في هذه الحالة، `twice(5)` يعود بقيمة 10.

وللمزيد حول الدوال العليا يفضل قراءة المقالة التالية

 

function multiplier(2) { return twice(5) => 5 * 2; }

هيك بتقصد ؟

بتاريخ 9 دقائق مضت قال Roog Roog:

function multiplier(2) { return twice(5) => 5 * 2; }

هيك بتقصد ؟

ممكن كتابة الدالة twice(5) وطريقة عملا ، يعني ما يجري خلف الكواليس ، بعد اضافة التابع والعدد للدالة ، وشكرا .

انا بصراحة ما عم افهم كيف العدد خمسة بالدالة twice(5) اخد مطرح number بالدالة المعادة في دالة multiplier (factor).

شكرا

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 34 دقائق مضت قال Roog Roog:

function multiplier(2) { return twice(5) => 5 * 2; }

هيك بتقصد ؟

ممكن كتابة الدالة twice(5) وطريقة عملا ، يعني ما يجري خلف الكواليس ، بعد اضافة التابع والعدد للدالة ، وشكرا .

انا بصراحة ما عم افهم كيف العدد خمسة بالدالة twice(5) اخد مطرح number بالدالة المعادة في دالة multiplier (factor).

شكرا

الكود يعتمد على ميزة في جافاسكريبت تسمى إغلاق (Closure) والتي تسمح لدوال داخلية بالوصول إلى المتغيرات الخارجية من الدالة التي تم إنشاؤها. 

تم إنشاء دالة multiplier التي تستقبل معامل (factor)، وتلك هذه الدالة تُعيد دالة أخرى (دالة مجهولة) تقوم بضرب العدد الذي تم تمريره إليها بالعامل (factor).

ثم تم تعريف متغير twice وتعيينه بنتيجة استدعاء دالة multiplier مع المعامل 2، مما يعني أن twice سيحتوي على الدالة الناتجة من استدعاء multiplier(2).

هنا الكود يصبح كالتالي:

function multiplier(factor) {
 return number => number * factor;
}
let twice = multiplier(2);
console.log(twice); // number => number * factor

لاحظ عند طباعة المتغير أعاد إلينا دالة.

وعندما نقوم بكتابة twice(5)، نقوم  باستدعاء الدالة الناتجة من multiplier(2) مع العدد 5 كمدخل، وبالتالي factor سيكون 2 (لأنه تم تمريره عند إنشاء twice)، وnumber سيكون 5 (لأنه تم تمريره عند استدعاء twice(5)).

الدالة الداخلية ستقوم بضرب number (الذي هو 5) في factor (الذي هو 2)، مما ينتج عنه القيمة 10.

القيمة المُرجعة من twice(5) هي 10، وهذا هو السبب في أن console.log(twice(5)) يعرض 10 في الإخراج.

أي أن الدالة multiplier تُنشئ وتُعيد دالة جديدة تأخذ عامل وتستخدمه للضرب في الأرقام الأخرى عند استدعاءها، الأمر الذي يسمح لك بإنشاء دوال مخصصة تستند إلى دوال أخرى وتحمل فيها معاملات محددة مسبقًا.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...