Ce que cet article vous apporte, ce sont les idées et le code source pour implémenter les fonctions de curry en JavaScript. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
Effet d'implémentation
const curry_fn = curry(fn); fn(1, 2, 3) == curry_fn(1)(2)(3);
Stocker les paramètres entrants jusqu'à la fermeture
Récupérer le nombre de paramètres grâce à l'attribut length de la fonction
Lorsque le nombre de paramètres n'est pas suffisant, renvoyer directement les paramètres stockés dans la méthode
Exécuter la fonction d'origine lorsque le nombre est égal au nombre de paramètres de la fonction d'origine
Si vous utilisez la valeur par défaut du paramètre ES6, la longueur sera ne soit pas égal au nombre réel de paramètres
Les paramètres sont obtenus à partir des arguments, ES6 utilise directement les paramètres de repos pour implémenter
function curry(fn) { var length = fn.length; //获取原函数的参数个数 var args = []; // args存储传入参数 return function curryFn() { // 将arguments转换成数组 var curryArgs = Array.prototype.slice.call(arguments); args = args.concat(curryArgs); if (args.length > length) { throw new Error('arguments length error') } // 存储的参数个数等于原函数参数个数时执行原函数 if (args.length === length) { return fn.apply(null, args); } // 否则继续返回函数 return curryFn; }; }
function curry(fn) { let length = fn.length; let args = []; return function curryFn(...curryArgs) { args = args.concat(curryArgs); if (args.length > length) { throw new Error('arguments length error') } if (args.length === length) { return fn(...args); } return curryFn; } }
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!