繁体   English   中英

咖喱和封闭?

[英]Currying and closure?

我在理解此代码的行为时遇到了麻烦。 num参数和array参数的行为似乎有所不同,我不确定是什么原因引起的。 因此,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")

如果这完全不是您要的内容,请说明您要寻找的期望输出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM