Maison  >  Article  >  interface Web  >  Explication détaillée d'exemples de curry js

Explication détaillée d'exemples de curry js

零下一度
零下一度original
2017-06-26 15:14:381486parcourir

1. Source

En informatique, le curry consiste à transformer une fonction qui accepte plusieurs paramètres en une fonction qui accepte un seul paramètre (le premier paramètre de la fonction d'origine), et une technique pour renvoyer un nouvelle fonction qui accepte les arguments restants et renvoie un résultat. Cette technique a été nommée par Christopher Strachey en l'honneur du logicien Haskell Curry, bien qu'elle ait été inventée par Moses Schnfinkel et Gottlob Frege.

2. Curring(1)(2)(3)(4)() Comment ajouter des paramètres pour que le résultat soit 10 ?

1. En fait, il suffit de réfléchir à comment conserver chaque paramètre, et enfin accumuler les paramètres lors de l'appel ? C'est là l'objet de notre réflexion.

function keepParams(){var arg = [];return function params(){if(arguments.length === 0){return arg;
    }
    Array.prototype.push.apply(arg,arguments);  //对apply方法不熟悉的可以去百度下return params;
}
}var curring = keepParams();
console.log(curring(1)(2)(3)(4)()); // [1, 2, 3, 4]

2. Grâce à la première étape, nous pouvons obtenir les paramètres. Ensuite, nous pouvons faire ce que nous voulons faire ensuite.

Comment implémenter l'addition ?

3. Changez la fonction de base

function add(){var sum = 0,l = arguments.length;for(var i = 0; i < l; i++){
        sum += arguments[i];
    }return sum;
};function keepParams(fn){var arg = [];return function params(){if(arguments.length === 0){return fn.apply(this,arg);
        }
        Array.prototype.push.apply(arg,arguments);  //对apply方法不熟悉的可以去百度下return params;
    }
}var curring = keepParams(add);//console.log(curring(1)(2)(3)(4)()); // 10console.log(curring(1)(2,3,4)()); // 10

4. Maintenant que la troisième étape de l'addition est mise en œuvre, multipliez et divisez. Attendez qu'une série d'opérations soit terminée. Cependant, vous devez faire attention à l'utilisation des fermetures si vous appelez la même méthode deux fois de suite.

arg sera enregistré en mémoire

console.log(curring(1)(2)(3)(4)()); // 10console.log(curring(1)(2,3,4)()); // 20

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn