将多个参数传递给柯里化函数

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.

的值