我是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()