在问题的最新版本中,所有三个都each
使用相同的值,最好使用逗号系列的选择器(如果它们是选择器)或add
函数(如果它们不是):
$('someElement, anotherElement, andMoreElement').each(function () {
functionName('value1', value2)
});
functionName(foo, element){
//function code here
}
或者
$('someElement').add('anotherElement').add('andMoreElement').each(function () {
functionName('value1', value2)
});
functionName(foo, element){
//function code here
}
同样,这取决于'someElement'
、'anotherElement'
等是选择器还是元素。
因为您使用each
的是立即调用该函数的 ,所以您也可以使用curry
下面的选项。如果您正在使用click
或类似的,使用curry
下面的选项会在value2
被评估时改变(从函数被调用到被柯里化),这可能是可取的或不可取的,具体取决于您的用例。
回答问题的早期版本:
可悲的是,您不能使用$.proxy
or Function#bind
,因为它们都会改变this
调用中的值。您可以创建一个重用调用它的curry
函数this
:
var slice = Array.prototype.slice;
function curry(f) {
var args = slice.call(arguments, 1); // Copy args after `f`
return function() {
return f.apply(this, args.concat(slice.call(arguments, 0)));
};
}
当您将一个函数和 X 个参数传递给 时curry
,它会返回一个函数,该函数在调用时将使用调用this
它的值、提供给 的参数curry
以及提供给调用的任何参数来调用原始函数。
然后:
$('someElement').each(curry(functionName, 'foo'));
$('anotherElement').each(curry(functionName, 'otherFoo'));
$('andMoreElement').each(curry(functionName, 'otherFoo'));
functionName(foo){
//function code here
}
或者作为后两个用途具有相同的论点:
$('someElement').each(curry(functionName, 'foo'));
$('anotherElement, andMoreElement').each(curry(functionName, 'otherFoo'));
// Or:
$('anotherElement').add('andMoreElement').each(curry(functionName, 'otherFoo'));
functionName(foo){
//function code here
}