الإغلاق والكاري تقنيات شائعة ومتقدمة نسبيا المستخدمة في جافا سكريبت. تدعم جميع لغات البرمجة الوظيفية هذين المفهومين. لذلك ، إذا أردنا الاستفادة الكاملة من خصائص البرمجة الوظيفية في JavaScript ، فنحن بحاجة إلى فهم متعمق لهذين المفهومين. الإغلاق هي في الواقع أساس لا غنى عنه للكاري.
1. مفهوم الكاري
في علوم الكمبيوتر ، تعتبر Curry تقنية لتحويل وظيفة تقبل معلمات متعددة في وظيفة تقبل معلمة واحدة (المعلمة الأولى من الوظيفة الأصلية) وإرجاع وظيفة جديدة تقبل المعلمات المتبقية وإرجاع النتيجة. تم تسمية هذه التكنولوجيا على اسم المنطق Haskell Curry بواسطة Christopher Strachey ، على الرغم من أنها اخترعها موسى Schnfinkel و Gottlob Frege. بشكل حدسي ، يدعي Curry أنه "إذا قمت بإصلاح معلمات معينة ، فستحصل على وظيفة تقبل المعلمات المتبقية". لذلك بالنسبة للدالة yx مع متغيرين ، إذا تم إصلاح y = 2 ، يتم الحصول على وظيفة 2x مع متغير واحد.
الكاري يعني تمرير بعض المعلمات من الوظيفة مسبقًا للحصول على وظيفة بسيطة. ولكن يتم حفظ المعلمات التي تم تمريرها مسبقًا في الإغلاق ، لذلك هناك بعض الميزات الغريبة. على سبيل المثال:
var adder = function (num) {return function (y) {return num + y ؛ }} var inc = adder (1) ؛ var dec = adder (-1)المتغيران INC/DEC هنا في الواقع وظيفتان جديدتان ، يمكن استدعاؤهما بين قوسين ، مثل الاستخدام في المثال التالي:
// Inc ، DEC الآن هي وظيفتان جديدتان ، يتم استخدامهما لنقل قيمة المعلمة الواردة (+/-) 1PRINT (INC (99)) ؛ // 100PRINT (DEC (101)) ؛ // 100PRINT (ADDER (100) (2)) ؛
2. تطبيق الكاري
وفقًا لميزة الكاري ، يمكننا كتابة رمز أكثر إثارة للاهتمام. على سبيل المثال ، في التنمية الأمامية ، نواجه هذا الموقف غالبًا. عندما يعود الطلب من الخادم ، نحتاج إلى تحديث بعض عناصر الصفحات المحددة ، أي مفهوم التحديث الجزئي. يعد استخدام التحديث المحلي أمرًا بسيطًا للغاية ، ولكن من السهل الكتابة في الكود في الفوضى. وإذا تم استخدام الكاري ، فيمكنه تجميل الكود لدينا بشكل كبير ويسهل الحفاظ عليه. لنلقي نظرة على مثال:
// سيقوم التحديث بإرجاع وظيفة ، والتي يمكنها تعيين سمة المعرف على محتوى عنصر الويب الخاص بوظيفة العنصر تحديث (العنصر) {function function (text) {$ ("div#"+item) .html (text) ؛ }} // AJAX request ، عند النجاح ، قم بالاتصال بالمعلمة callbackFunction Refrend (url ، callback) {var params = {type: "echo" ، data: ""} ؛ $ .ajax ({type: "post" ، url: url ، cache: false ، async: true ، datatype: "json" ، data: params ، }) ؛} تحديث ("Action.do؟target=news" ، تحديث ("Newspanel")) ؛ تحديث ("Action.do؟target=articles" ، تحديث ("articlepanel")) ؛ تحديث ("Action.do؟target=pictures" ، تحديث ("PicturePanel")) ؛ عندما تكون وظيفة التحديث مثيلًا للكاري ، والذي سيعيد وظيفة ، أي: تحديث ("Newspanel") = Function (text) {$ ("Div#Newspanel"). html (text) ؛}نظرًا لأن قيمة إرجاع التحديث ("Newspanel") هي وظيفة والمعلمة المطلوبة هي سلسلة ، في مكالمة AJAX من التحديث ، عندما النجاح ، سيتم تمرير البيانات التي يتم إرجاعها بواسطة رد الاتصال إلى رد الاتصال ، وبالتالي تحقيق تحديث لوحة الصحف. تم تبني جميع تحديث لوحة المقالة الأخرى مقال PanePanel و Picture PicturePanel بهذه الطريقة. وبهذه الطريقة ، يتم تحسين قابلية القراءة وقابلية الكود.
ما سبق هو المحتوى الكامل لهذه المقالة. لمزيد من المعلومات حول JavaScript ، يمكنك التحقق من: "دليل JavaScript Reference Tutorial" و "JavaScript Code Style". آمل أيضًا أن يدعم الجميع wulin.com أكثر.