Закрытие и карри являются общими и относительно продвинутыми методами, используемыми в JavaScript. Все языки функционального программирования поддерживают эти две концепции. Поэтому, если мы хотим полностью использовать характеристики функционального программирования в JavaScript, мы должны иметь глубокое понимание этих двух концепций. Закрытие на самом деле является незаменимой основой для карри.
1. Концепция карри
В информатике 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)); // 102print (adder (2) (100); // 102
2. Применение карри
Согласно функции карри, мы можем написать более интересный код. Например, в фронте развития мы часто сталкиваемся с этой ситуацией. Когда запрос возвращается с сервера, нам нужно обновить некоторые конкретные элементы страницы, то есть концепцию частичного обновления. Использование локального обновления очень просто, но код легко написать в беспорядок. И если используется карри, это может значительно украсить наш код и облегчить его обслуживание. Давайте посмотрим на пример:
// Обновление вернет функцию, которая может установить атрибут идентификатора на содержимое веб -элемента функции элемента обновления (элемент) {return function (text) {$ ("div#"+item) .html (text); }} // ajax -запрос, при успешном, параметры вызова обратной функции обновления (url, обратный вызов) {var params = {type: "echo", data: ""}; $ .ajax ({type: "post", url: url, cache: false, async: true, datatype: "json", data: params, // call Success: function (data, status) {callback (data);}, // Ошибка вызова, когда ошибка возникает в запросе: функция (err) {alert ("error:"+urr); });} refresh ("action.do?target=news", update ("Newspanel")); refresh ("action.do?target=Articles", Update ("articlePanel")); refresh ("action.do?target=pictures", обновление ("PicturePanel")); где функция обновления является экземпляром Curry, который вернет функцию, то есть: update ("Newspanel") = function (text) {$ ("Div#Newspanel"). Html (Text);}Поскольку возвратное значение обновления («Newspanel») является функцией, а требуемый параметр - это строка, в Ajax Call of Revely, когда успех, данные, возвращаемые обратным вызовом Обновление другой статьи панели статьи и картинной панели PicturePanel принята таким образом. Таким образом, читаемость и обслуживание кода улучшаются.
Вышеуказанное - все содержание этой статьи. Для получения дополнительной информации о JavaScript вы можете проверить: «Справочный учебник JavaScript» и «Руководство по стилю кода JavaScript». Я также надеюсь, что все будут поддерживать Wulin.com больше.