我不明白这个javascript函数调用以及它的用途

问题描述 投票:0回答:2

我遇到了一些我不熟悉的东西,并且真的很想了解如何以及为什么要这样做:

假设我们有一个名为 myfunc 的函数,可以通过两种方式之一调用它并返回相同的值(假设简单的整数加法):

myfunc(1,2)
myfunc(1)(2)

我查遍了所有内容,但找不到第二次调用的任何示例。 我的理解是,该函数可以返回一个函数对象(可能定义为闭包或 lambda?),然后将其作为参数传递?

javascript function currying
2个回答
8
投票

这称为柯里化。 在您的示例中,该函数可能如下所示:

function myfunc(a, b) {
    if (b === undefined || b === null)
        return function(c) { return myfunc(a, c) }

    return a + b;
}

本质上,如果参数

b
尚未被传递,它会返回一个新函数,该函数使用绑定到它已经知道的参数的第一个参数来调用自身。 未来对该返回函数的调用只需要第二个参数,在此处的示例中作为
c
传递。

以这种方式使用柯里化函数意味着您可以创建对函数的引用来执行特定功能,例如:

var add5 = myfunc(5);
console.log(add5(6)); //11

在您原来的帖子中,您立即调用柯里化函数,而不将对其的引用存储在变量中。


1
投票

如果你很好地理解了 Javascript 中的函数,那就很容易了。

试试这个:

console.log(typeof myfunc(1)); // return : 'function'

所以:你可以这样做(更具可读性)

var result = myfunc(1);
result(2);
© www.soinside.com 2019 - 2024. All rights reserved.