将多个参数传递给柯里化函数
Passing multiple arguments to curried functions
我目前正在阅读 Effective Javascript 这本书,并且已经读到有关闭包的章节。有一个示例说明如何传递嵌套函数的参数:
function sandwichMaker(magicIngredient) {
function make(filling) {
return magicIngredient + " and " + filling;
}
return make;
}
var hamAnd = sandwichMaker("ham");
hamAnd("swiss"); // ham and swiss
但是如果我要传递两个参数(一个用于初始函数,第二个用于嵌套函数),我会得到第二个参数的未定义:
sandwichMaker("ham", "swiss"); // ham and undefined
我是否总是需要先声明一个变量,然后在我想调用它时提供第二个参数?
如果您想将参数传递给第二个函数而不将其存储在变量中,您可以这样做
sandwichMaker("ham")("swiss");
由于 sandwichMaker
returns 一个函数,您要查找的实际调用是 sandwichMaker("ham")("swiss");
请记住,如果名称后没有括号,函数的行为将与任何其他变量一样,因为您可以传递它而无需实际计算或 "running" 它。
因此,return make;
为您提供了一个您可以稍后计算的函数,而 return make(...);
为您提供了计算 make
.
的值
我目前正在阅读 Effective Javascript 这本书,并且已经读到有关闭包的章节。有一个示例说明如何传递嵌套函数的参数:
function sandwichMaker(magicIngredient) {
function make(filling) {
return magicIngredient + " and " + filling;
}
return make;
}
var hamAnd = sandwichMaker("ham");
hamAnd("swiss"); // ham and swiss
但是如果我要传递两个参数(一个用于初始函数,第二个用于嵌套函数),我会得到第二个参数的未定义:
sandwichMaker("ham", "swiss"); // ham and undefined
我是否总是需要先声明一个变量,然后在我想调用它时提供第二个参数?
如果您想将参数传递给第二个函数而不将其存储在变量中,您可以这样做
sandwichMaker("ham")("swiss");
由于 sandwichMaker
returns 一个函数,您要查找的实际调用是 sandwichMaker("ham")("swiss");
请记住,如果名称后没有括号,函数的行为将与任何其他变量一样,因为您可以传递它而无需实际计算或 "running" 它。
因此,return make;
为您提供了一个您可以稍后计算的函数,而 return make(...);
为您提供了计算 make
.