Maison > interface Web > js tutoriel > le corps du texte

Idées et code source pour implémenter la fonction curry en JavaScript

不言
Libérer: 2018-11-20 15:22:45
avant
2148 Les gens l'ont consulté

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);
Copier après la connexion

Idée d'implémentation

  1. Stocker les paramètres entrants jusqu'à la fermeture

  2. Récupérer le nombre de paramètres grâce à l'attribut length de la fonction

  3. Lorsque le nombre de paramètres n'est pas suffisant, renvoyer directement les paramètres stockés dans la méthode

  4. 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

Implémentation du code source

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;
    };
}
Copier après la connexion

Version ES6

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;
    }
}
Copier après la connexion

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!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!