Currying and closure?



我很难理解这段代码的行为。num参数和数组参数的作用似乎不同,我不确定是什么原因导致了这种情况。因此,num参数会跟踪curried函数被调用的次数,你可以回到curry链上,它会保留正确的num,并让你带着新的输入回到链上。我认为数组也会以同样的方式工作,但数组不断累积输入,我不确定是什么导致它像num一样,我正在绑定它的当前值,就像我绑定num一样。

function curryN(fn, n) {
    n = n || fn.length;
    return function curried(num, array, input) {
        console.log(array);
        num = num || n;
        array.push(input);
        num--;
        console.log(num);
        while (num >= 1) {
            return curried.bind(this, num, array)
        }
        var tempArray = array;
        return fn.apply(this, tempArray)
    }.bind(this, n, [])
}
function abc(one, two, three) {
    return one/two/three;
}
var curryC = curryN(abc),
    curryB = curryC(81),
    curryA = curryB(9);

我不完全确定你在问什么,但我想你在问为什么当你把字母推入数组时,它们会显示为数字。

如果要将字符串推送到该数组,请将其用引号括起来,这样编译器就知道您希望将字母存储为字符串,而不是其数字等价物。通常,值不需要在Javascript中键入,但如果您使用混合数组,则需要让编译器知道您希望它保持为字符串。

例如

var curryC = curryN(abc)

应该是

var curryC = curryN("abc")

如果这完全不是你想要的,那么请解释你想要什么样的输出。

最新更新