В чем смысл "callback.call(value, i, value)" в jQuery для каждого метода?
each()
метод в jQuery содержит такой оператор:
callback.call( value, i, value )
Я не мог понять, что означает это утверждение.
Я знаю, что означают callback
и call
, но я не могу получить аргументы вызова функции: (value,i,value)
. Что это значит?
Оператор используется в блоке each()
, но мой вопрос не зависит от этого контекста.
из источника jQuery:
for ( var value = object[0];
i < length &&
callback.call( value, i, value ) // <=== LOOK!
!== false;
value = object[++i] ) {}
Ответы
Ответ 1
Метод call
существует для всех функций в Javascript. Он позволяет вам вызвать функцию и при этом установить значение this
внутри этой функции.
function myFunc() {
console.log(this);
}
myFunc.call(document.body);
В этом примере this
внутри myFunc
будет document.body
.
Первым параметром call
является значение, которое должно быть установлено как this
; последующие параметры передаются функции как обычные параметры. Итак, в вашем примере:
callback.call( value, i, value )
это эквивалентно
callback(i, value)
за исключением того, что в обратном вызове this
теперь также устанавливается на value
.
Ответ 2
Метод .each()
вызывает обратный вызов, который вы передаете ему с элементом (текущая итерация "target" ) как объект контекста (значение this
), так и второй параметр.
Таким образом, в одной из этих функций:
$('.foo').each(function(i, elem) {
var $this = $(this), $elem = $(elem);
Переменные $this
и $elem
взаимозаменяемы.
Первый аргумент .call()
- это значение, которому должно быть привязано this
, если это не ясно. Остальные аргументы .call()
передаются как простые аргументы функции.
Ответ 3
Это вызывает метод callback
с this
, установленным на value
(первый параметр call
) и с аргументами i
и value
. (Другие параметры call
)