Javascript curry和空参数

Javascript curry和空参数,javascript,lodash,Javascript,Lodash,我目前正在尝试咖喱,有一个关于空参数的问题。 我有一个curried函数来执行ajax请求: var ajax = _.curry(function(method, request){ if(request === undefined){ request = {}; } $.ajax({ type: 'POST', url: getUrl(method), data: request, }) }); 因此,我可以定义各种调用: var inser

我目前正在尝试咖喱,有一个关于空参数的问题。
我有一个curried函数来执行ajax请求:

var ajax = _.curry(function(method, request){
  if(request === undefined){
    request = {};
  }
  $.ajax({
    type: 'POST',
    url: getUrl(method),
    data: request,
  })
});
因此,我可以定义各种调用:

var insert = ajax('insert');
var update = ajax('update');
var del = ajax('delete');
其工作原理如下:

insert({ id: 1, name: 'something' });
var fn = curried(1);
fn();
但如果我不使用参数调用它,则不起作用。
调用Curried函数:

del({});
未调用Curried函数:

del();

为什么?

我相信比我更了解咖喱的人可以更深入地描述这一点。然而,我对咖喱化的看法是,通过咖喱化一个函数,您打算将参数“滴”到原始函数中。只有在输入预期数量的参数后,才会调用原始函数

现在有一个问题:大多数示例都只包含一个参数,就像您试图做的那样:

var curried = _.curry(function(foo, bar, baz){
    console.log(foo, bar, baz);
})
curried(1)(2)(3);
// -> 1 2 3
这一切都很好。但是,请注意,您可以这样做:

curried(1)(2,3);
// -> 1 2 3
你会得到同样的结果。第二个和第三个论据是一点一点地结合在一起的

所以你现在做的是这样的:

insert({ id: 1, name: 'something' });
var fn = curried(1);
fn();
fn
的调用传递了零个参数,也就是说,您已经滴入了零个参数,因此您朝着运行原始函数的目标前进了零个参数。你可以整天调用
fn()
,它永远不会调用原来的curried函数

如果您调用
fn(未定义)
它将(应该)起作用,因为您实际上已将一个参数显式地传递为
undefined


我不确定这是否只是一个lodash实现细节。我想可能不会,因为如果你希望
fn()
起作用,它怎么知道你是指
fn(未定义)
还是
fn(未定义,未定义)
ad infinity?

好吧,也许我应该更具体地说“不起作用”。它不调用curried函数。这是一个简化的示例,但getUrl的作用类似于
location.origin+method
,应该始终提供方法,但请求可能未定义/可选这就是curry工作的方式声明curry函数,称之为,
powder
。。。然后
var ajax=\咖喱粉。。。然后可以声明del
var del=powder.bind(null,'delete')-插入/更新保持原样。。。您可以使用或不使用参数调用
del()