如何使用此_curryN函数?

时间:2019-05-03 09:59:30

标签: javascript

我是js咖喱的第一人(之前我在OCaml中见过咖喱)。

我发现了一些代表咖喱功能的功能。

我只知道咖喱使之成为可能

add(1)(2)(3)
= add(1,2)(3)
= add(1,2,3)
= 6

但是我不明白为什么在应用时它不进入function()(第二行)

_curryN(3,[],add)

它只是进入_curryN并结束而没有进入内部函数。

我无法完全理解此功能的逻辑。请帮忙。

function _curryN(length, received, fn) {  
    return function() {  
        var combined = [];   
        var argsIdx = 0;  
        var left = length;
        var combinedIdx = 0;
        while (combinedIdx < received.length || argsIdx < arguments.length) {        
            var result;
            if (combinedIdx < received.length) {
                result = received[combinedIdx];
            } else {
                result = arguments[argsIdx];
                argsIdx += 1;
            }
                combined[combinedIdx] = result; 
                left -= 1;      
                combinedIdx += 1;
            }
        return left <= 0 ? fn(...combined)
            :_arity(left, _curryN(length, combined, fn));
    };
}    

我天真地认为

_curryN(3,[],add)

进入函数,由于argsIdx小于

arguments.length

但即使它没有加入function()

0 个答案:

没有答案