我有以下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);});
有没有更好的方法来编写上面的代码?
答案 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实现的方法。