هل هناك أي فرق بين "الكاري" و "الإغلاق" في جافا سكريبت؟


الاجابه 1:

إنشاء إغلاق ليس أكثر من الوصول إلى متغير خارج نطاق الوظيفة. يرجى ملاحظة أن وظيفة داخل وظيفة ليست إغلاق. تستخدم عمليات الإغلاق دائمًا عند الحاجة للوصول إلى المتغيرات خارج نطاق الوظيفة.

هنا هو مثال الإغلاق

يقوم Currying بتحويل دالة واحدة من الوسائط n إلى وظائف n مع وسيطة واحدة لكل منها. لذلك يمكنك القول أن Currying هي طريقة لتقليل وظائف أكثر من وسيطة واحدة إلى وظائف وسيطة واحدة.

هنا هو مثال وظيفة Currying في JavaScript

تستخدم وظائف Currying خاصية الإغلاق.


الاجابه 2:

الإجابات الأخرى صحيحة ، حيث أن Currying و Closures هما مفهومان مختلفان. ومع ذلك ، فهي مرتبطة بمعنى أنه يمكن استخدام كليهما لإنجاز بعض الأشياء نفسها.

خذ على سبيل المثال الإغلاق التالي لأداء نفس وظيفة التطبيق الجزئي

const makeAdder (x) {
عائد (ص) => {
العودة س + ص
}
}

const add9 = makeAdder (9)
console.log (add9 (2)) // 11

يتم تحقيق ذلك غالبًا باستخدام الكاري مثل ذلك (باستخدام ramda.js)

const makeAdder = (x، y) => {
 العودة س + ص
}
const curriedMakeAdder = R.curry (makeAdder)
const add9 = curriedMakeAdder (9)
console.log (add9 (2)) // 11

نعم ، المفهومان مختلفان ، ولكن مثل العديد من المفاهيم في البرمجة ، هناك العديد من الطرق المختلفة لإنجاز المهمة نفسها. حتى لو كانت الأساليب متشابهة إلى حد كبير ، فهناك اختلاف كبير يحدث تحت الغطاء.


الاجابه 3:

الإجابات الأخرى صحيحة ، حيث أن Currying و Closures هما مفهومان مختلفان. ومع ذلك ، فهي مرتبطة بمعنى أنه يمكن استخدام كليهما لإنجاز بعض الأشياء نفسها.

خذ على سبيل المثال الإغلاق التالي لأداء نفس وظيفة التطبيق الجزئي

const makeAdder (x) {
عائد (ص) => {
العودة س + ص
}
}

const add9 = makeAdder (9)
console.log (add9 (2)) // 11

يتم تحقيق ذلك غالبًا باستخدام الكاري مثل ذلك (باستخدام ramda.js)

const makeAdder = (x، y) => {
 العودة س + ص
}
const curriedMakeAdder = R.curry (makeAdder)
const add9 = curriedMakeAdder (9)
console.log (add9 (2)) // 11

نعم ، المفهومان مختلفان ، ولكن مثل العديد من المفاهيم في البرمجة ، هناك العديد من الطرق المختلفة لإنجاز المهمة نفسها. حتى لو كانت الأساليب متشابهة إلى حد كبير ، فهناك اختلاف كبير يحدث تحت الغطاء.


الاجابه 4:

الإجابات الأخرى صحيحة ، حيث أن Currying و Closures هما مفهومان مختلفان. ومع ذلك ، فهي مرتبطة بمعنى أنه يمكن استخدام كليهما لإنجاز بعض الأشياء نفسها.

خذ على سبيل المثال الإغلاق التالي لأداء نفس وظيفة التطبيق الجزئي

const makeAdder (x) {
عائد (ص) => {
العودة س + ص
}
}

const add9 = makeAdder (9)
console.log (add9 (2)) // 11

يتم تحقيق ذلك غالبًا باستخدام الكاري مثل ذلك (باستخدام ramda.js)

const makeAdder = (x، y) => {
 العودة س + ص
}
const curriedMakeAdder = R.curry (makeAdder)
const add9 = curriedMakeAdder (9)
console.log (add9 (2)) // 11

نعم ، المفهومان مختلفان ، ولكن مثل العديد من المفاهيم في البرمجة ، هناك العديد من الطرق المختلفة لإنجاز المهمة نفسها. حتى لو كانت الأساليب متشابهة إلى حد كبير ، فهناك اختلاف كبير يحدث تحت الغطاء.