Los cierres y el curry son técnicas comunes y relativamente avanzadas utilizadas en JavaScript. Todos los lenguajes de programación funcional admiten estos dos conceptos. Por lo tanto, si queremos utilizar completamente las características de programación funcional en JavaScript, necesitamos tener una comprensión profunda de estos dos conceptos. Los cierres son en realidad una base indispensable para el curry.
1. El concepto de curry
En la informática, Curry es una técnica para transformar una función que acepta múltiples parámetros en una función que acepta un solo parámetro (el primer parámetro de la función original) y devolver una nueva función que acepta los parámetros restantes y devuelve el resultado. La tecnología lleva el nombre del lógico Haskell Curry por Christopher Strachey, aunque fue inventado por Moses Schnfinkel y Gottlob Froge. Intuitivamente, Curry afirma que "si corrige ciertos parámetros, obtendrá una función que acepta los parámetros restantes". Entonces, para una función yx con dos variables, si y = 2 se fija, se obtiene una función 2x con una variable.
Currying significa pasar ciertos parámetros de la función de antemano para obtener una función simple. Pero los parámetros previamente pasados se guardan en el cierre, por lo que hay algunas características peculiares. Por ejemplo:
var adder = function (num) {function de return (y) {return num + y; }} var inc = adder (1); var dec = adder (-1)Las dos variables Inc/Dec aquí son en realidad dos funciones nuevas, que pueden llamarse entre paréntesis, como el uso en el siguiente ejemplo:
// Inc, Dec ahora es dos nuevas funciones, que se usan para transferir el valor del parámetro entrante (+/-) 1Print (Inc (99)); // 100Print (dec (101)); // 100Print (Adder (100) (2)); // 102print (Adder (2) (100)); // 102
2. Aplicación de curry
Según la función de curry, podemos escribir un código más interesante. Por ejemplo, en el desarrollo front-end, a menudo encontramos esta situación. Cuando la solicitud regresa del servidor, necesitamos actualizar algunos elementos de página específicos, es decir, el concepto de actualización parcial. El uso de la actualización local es muy simple, pero el código es fácil de escribir en un desastre. Y si se usa el curry, puede embellecer enormemente nuestro código y facilitar el mantenimiento. Echemos un vistazo a un ejemplo:
// Actualizar devolverá una función, que puede establecer el atributo de ID en el contenido del elemento web del elemento de la función actualización (elemento) {function return (text) {$ ("div#"+elemento) .html (text); }} // solicitud AJAX, cuando tiene éxito, el parámetro de llamada de llamadas, la actualización de devolución de devolución (URL, Callback) {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);}, // Llamar error cuando se produce un error en la solicitud: function (err) {alerta ("error:"+err);} });} refresh ("Action.do?Target=news", Update ("NewsPanel")); refresh ("Action.do?Target=Articles", Update ("ArtículoPanel")); Refresh ("Action.do?Target=Pictures", Update ("ImagePanel")); Donde la función de actualización es una instancia de curry, que devolverá una función, es decir: update ("newspanel") = function (text) {$ ("div#newspanel"). html (text);}Dado que el valor de retorno de la actualización ("periódico") es una función y el parámetro requerido es una cadena, en la llamada de actualización de AJAX, cuando el éxito, los datos devueltos por la devolución de llamada se pasarán a la devolución de llamada, dando así la actualización del panel de periódicos. La actualización de otros artículos del panel de artículo Panel y el panel de imágenes PicturePanel se adoptan de esta manera. De esta manera, se mejoran la legibilidad y la mantenimiento del código.
Lo anterior es todo el contenido de este artículo. Para obtener más información sobre JavaScript, puede consultar: "Tutorial de referencia de JavaScript" y "Guía de estilo de código JavaScript". También espero que todos apoyen más a Wulin.com.