Currying - 如何在 JavaScript 中使用第二个参数调用返回的函数?
Currying - How is returned function called with a second argument in JavaScript?
如何在 liftf(add)(1) 中调用第二个参数?
function add (first, second) {
return first + second;
}
function liftf (binary) {
return function (first) {
return function (second) {
return binary(first, second);
};
};
}
var inc = liftf(add)(1);
我了解如何调用和存储 lift(add)。
我对一个函数是如何返回然后用 (1) 调用感到困惑的。
我首先探讨了它是否按照与 IIFE 相同的原理运行,但似乎并非如此。 IFFE 将是 (function() {}()) vs funciton() {}().
'chained' 函数参数让我感到困惑,我想了解发生了什么。
谢谢!
如果表达式的计算结果为函数,则可以使用括号和参数列表调用该函数。
因为表达式liftf(add)
returns是一个函数,你调用返回的函数,参数1
在括号中:liftf(add)(1)
另一种看待它的方法是,如果您将 liftf(add)
设置为一个变量,那么您可以调用存储在该变量中的函数:
var additionFunc = liftf(add) // Stores the new function in additionFunc
var result = additionFunc(1) // Evaluates the new function
我们也来看看IIFEs。假设我们有这样一个:
(function(x) {return x + 1})(5)
(function() { /* ... */ })
表达式求值为一个函数,然后由括号和参数 (5)
.
求值
让我们看一个更简单的柯里化示例:
function add(x) {
return function (y) {
return x + y;
};
}
如果你只用一个参数调用它,像这样:
add(2);
它将扩展为:
function (y) {
return 2 + y;
}
需要一个 y
参数(如果你调用它的话)。你可以 运行 像这样:
function (y) {
return 2 + y;
}(5)
或更简洁:
add(2)(5);
每个函数只是在柯里化时扩展为一个新的匿名函数,所以即使它看起来很奇怪,一旦你扩展代码,它就会开始有意义。
如何在 liftf(add)(1) 中调用第二个参数?
function add (first, second) {
return first + second;
}
function liftf (binary) {
return function (first) {
return function (second) {
return binary(first, second);
};
};
}
var inc = liftf(add)(1);
我了解如何调用和存储 lift(add)。
我对一个函数是如何返回然后用 (1) 调用感到困惑的。
我首先探讨了它是否按照与 IIFE 相同的原理运行,但似乎并非如此。 IFFE 将是 (function() {}()) vs funciton() {}().
'chained' 函数参数让我感到困惑,我想了解发生了什么。
谢谢!
如果表达式的计算结果为函数,则可以使用括号和参数列表调用该函数。
因为表达式liftf(add)
returns是一个函数,你调用返回的函数,参数1
在括号中:liftf(add)(1)
另一种看待它的方法是,如果您将 liftf(add)
设置为一个变量,那么您可以调用存储在该变量中的函数:
var additionFunc = liftf(add) // Stores the new function in additionFunc
var result = additionFunc(1) // Evaluates the new function
我们也来看看IIFEs。假设我们有这样一个:
(function(x) {return x + 1})(5)
(function() { /* ... */ })
表达式求值为一个函数,然后由括号和参数 (5)
.
让我们看一个更简单的柯里化示例:
function add(x) {
return function (y) {
return x + y;
};
}
如果你只用一个参数调用它,像这样:
add(2);
它将扩展为:
function (y) {
return 2 + y;
}
需要一个 y
参数(如果你调用它的话)。你可以 运行 像这样:
function (y) {
return 2 + y;
}(5)
或更简洁:
add(2)(5);
每个函数只是在柯里化时扩展为一个新的匿名函数,所以即使它看起来很奇怪,一旦你扩展代码,它就会开始有意义。