O fechamento e o curry são técnicas comuns e relativamente avançadas usadas no JavaScript. Todas as linguagens de programação funcionais suportam esses dois conceitos. Portanto, se queremos utilizar completamente as características funcionais de programação no JavaScript, precisamos ter um entendimento profundo desses dois conceitos. Os fechamentos são na verdade uma base indispensável para a curry.
1. O conceito de currying
Na ciência da computação, o curry é uma técnica de transformar uma função que aceita vários parâmetros em uma função que aceita um único parâmetro (o primeiro parâmetro da função original) e retornando uma nova função que aceita os parâmetros restantes e retorna o resultado. A tecnologia recebeu o nome do lógico Haskell Curry, de Christopher Strachey, embora tenha sido inventado por Moses Schnfinkel e Gottlob Frege. Intuitivamente, Curry afirma que "se você consertar certos parâmetros, obterá uma função que aceite os parâmetros restantes". Portanto, para uma função yx com duas variáveis, se y = 2 for fixo, uma função 2x com uma variável será obtida.
Curry significa passar certos parâmetros da função com antecedência para obter uma função simples. Mas os parâmetros pré-passados são salvos no fechamento, então existem alguns recursos peculiares. por exemplo:
var adder = function (num) {return function (y) {return num + y; }} var inc = adder (1); var deC = Adder (-1)As duas variáveis Inc/DEC aqui estão na verdade duas novas funções, que podem ser chamadas entre parênteses, como o uso no exemplo a seguir:
// Inc, DEC agora é duas novas funções, usadas para transferir o valor do parâmetro recebido (+/-) 1print (Inc (99)); // 100print (dez (101)); // 100print (Adder (100) (2)); // 102Print (Adder (2) (100); // 102
2. Aplicação de curry
De acordo com o recurso de curry, podemos escrever um código mais interessante. Por exemplo, no desenvolvimento do front-end, geralmente encontramos essa situação. Quando a solicitação retorna do servidor, precisamos atualizar alguns elementos específicos da página, ou seja, o conceito de atualização parcial. Usar a atualização local é muito simples, mas o código é fácil de escrever em uma bagunça. E se a curry for usada, ele pode embelezar bastante nosso código e facilitar a manutenção. Vamos dar uma olhada em um exemplo:
// Atualização retornará uma função, que pode definir o atributo ID para o conteúdo do elemento da web da atualização da função do item (item) {return function (text) {$ ("div#"+item) .html (text); }} // solicitação AJAX, Quando bem -sucedido, ligue para o parâmetro de chamada de backfunção (url, retorno de chamada) {var params = {type: "echo", dados: ""}; $ .ajax ({type: "post", url: url, cache: false, assíncrono: true, datatype: "json", dados: params, // SUCESSO DE CHAMADA: function (dados, status) {chamado de retorno (dados);}, // erro de chamada quando ocorre um erro na solicitação: função (err) {alert); });} refresh ("action.do?target=news", update ("Newspanel"))); refresh ("action.do?target=articles", update ("ArtigoPanel")); refresh ("action.do?target=pictures", atualização ("picturepanel")); Onde a função de atualização é uma instância de curry, que retornará uma função, ou seja: atualização ("Newspanel") = function (text) {$ ("div#Newspanel"). html (text);}Como o valor de retorno da atualização ("NewsPanel") é uma função e o parâmetro necessário é uma string, na chamada do AJAX da atualização, quando o sucesso, os dados retornados pelo retorno de chamada serão passados para o retorno de chamada, percebendo assim a atualização do painel de jornais. A atualização de outro artigo do painel de artigos e a imagem do painel de fotos são todos adotados dessa maneira. Dessa forma, a legibilidade e a manutenção do código são aprimoradas.
O acima é o conteúdo inteiro deste artigo. Para obter mais informações sobre JavaScript, você pode conferir: "Javascript Reference Tutorial" e "JavaScript Code Style Guide". Eu também espero que todos apoiem mais wulin.com.