Что касается последней версии вопроса, где все три each используют одни и те же значения, лучше всего использовать селекторы с последовательностью запятых (если это селекторы ) или функцию add (если это не так):
$('someElement, anotherElement, andMoreElement').each(function () {
functionName('value1', value2)
});
functionName(foo, element){
//function code here
}
or
$('someElement').add('anotherElement').add('andMoreElement').each(function () {
functionName('value1', value2)
});
functionName(foo, element){
//function code here
}
Опять же, это зависит от того, являются ли 'someElement', 'anotherElement' и т. д. селекторами или элементами.
Поскольку вы используете each, который сразу же вызывает функцию, вы можете также использовать параметр curry ниже. Если бы вы использовали click или подобное, использование параметра curry ниже изменило бы, когда value2 был оценен (с момента вызова функции до момента ее каррирования), что может быть желательным или нежелательным в зависимости от вашего варианта использования.
Ответ на более раннюю версию вопроса:
К сожалению, вы не можете использовать для этого $.proxy или 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
}
person
T.J. Crowder
schedule
11.09.2013
$('.thesameClass').each(function() { });- person HTTP   schedule 11.09.2013fooиotherfoo- откуда они берутся? вы можете поместить их в атрибут данных элемента, а затем просто вызвать один цикл, передавая атрибут данных вfunctionName- person Pete   schedule 11.09.2013$('someElement').each(functionName)было бы короче, если бы функция не нуждалась в параметрах. - person nnnnnn   schedule 11.09.2013