Подтвердить что ты не робот

В чем смысл "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] ) {}
4b9b3361

Ответ 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)