如何在Javascript中将多个参数传递给委托?

时间:2015-02-16 18:02:15

标签: javascript jquery

我有以下JS代码,它使用jQuery:

var anArray=[];
var passIntoFun =100; // calculated value;

function ArrayIteratorFun(index, element, thirdParam){
   // function code.
}

我想使用.each构造调用ArrayIteratorFun,如:

$(anArray).each(ArrayIteratorFun(passIntoFun));

我只能通过包装到函数中来调用它:

$(anArray).each(function(i,e){ArrayIteratorFun(i,e,passIntoFun);});

有没有更好的方法来编写上面的代码?

1 个答案:

答案 0 :(得分:1)

假设您的示例过于简单,并且您的函数无法访问您希望作为参数传递的变量(正如一条评论所暗示的那样)......

您遇到的问题是预填充 thirdParam的某些参数(在您的案例中为ArrayIteratorFun)。有时你会看到这种称为部分应用或currying的技术。

您碰巧想要应用第三个参数(保留前面的参数未填充),这消除了使用Function.prototype.bind的可能性。绑定很有用,但我经常使用partial中更灵活的underscore函数。

使用partial,您可以使用_代替您想要应用/填充的参数来应用任意参数:

$(anArray).each(_.partial(ArrayIteratorFun, _, _, passIntoFun));

上面忽略ArrayIteratorFun的前两个参数(使用下划线)并将passIntoFun的值应用于第三个参数。

编辑:我不知道jQuery提供的任何方式与_.partial做同样的事情。但是,如果您不能使用下划线(或类似的框架),我建议您在下划线中查看partial的{​​{1}},并在javascript中查看部分应用主题的the implementation。这两者都提供了仅使用普通javascript实现的方法。