лучшее понимание функций обратного вызова в JavaScript - PullRequest
2 голосов
/ 14 октября 2010

Я читаю эту функцию в книге, и я не понимаю, как анонимная функция получает три аргумента жажды?

Это я понимаю

function multiplyByTwo(a, b, c, callback) {
  var i, ar = [];
  for(i = 0; i < 3; i++) {
    ar[i] = callback(arguments[i] * 2);
  }
  return ar;
}

ноне это

myarr = multiplyByTwo(1, 2, 3, function(a){return a + 1});

спасибо, Ричард

Ответы [ 2 ]

2 голосов
/ 14 октября 2010

Некоторые комментарии, детализирующие контракт функции multiplyByTwo, будут полезны здесь:

// multiplyByTwo
// num num num (num -> x) -> x[]
function multiplyByTwo(a, b, c, callback) {
  ...

Это означает, что функция принимает четыре аргумента и возвращает массив x. x может быть любого типа. Первые три аргумента являются числами. Четвертый аргумент функции - это сама функция. Эта функция принимает число и возвращает x. Опять же, x может быть любого типа, но это тот же тип во всем контракте.

Внутри функции multiplyByTwo функция обратного вызова вызывается один раз для каждого из других аргументов. Результат каждого из этих вызовов добавляется в массив, который является возвращаемым значением multiplyByTwo.

Переменная arguments - это специальная переменная в javascript, которая в рамках функции предоставляет доступ ко всем аргументам этой функции в виде массива.

Функция обратного вызова связана с именем callback в области действия функции multiplyByTwo. Затем его можно вызвать как любую другую функцию, например, добавив скобки и аргументы. На анонимную функцию, которую вы дали при вызове multiplyByTwo, можно ссылаться по этому имени.

Итак, в данном примере multiplyByTwo вызывается с четырьмя аргументами: 1, 2, 3 и анонимной функцией. Внутри функции multiplyByTwo эти аргументы связаны с переменными a, b, c и callback соответственно. На эти аргументы также можно ссылаться через специальный массив arguments. В этом примере оба метода используются для ссылки на аргументы. На первые три ссылаются, используя массив arguments внутри цикла, а на четвертый аргумент ссылаются, используя его имя, как в callback(...).

1 голос
/ 14 октября 2010

Анонимная функция вызывается 3 раза в цикле, каждый раз передавая другой аргумент. Первый раз, когда он проходит в arguments[0], то есть aarguments[1] будет b и т. Д.). arguments является свойством выполняемой в данный момент функции и относится к параметрам, переданным в функцию. В JavaScript вам не нужно называть свои параметры, или обращаться к ним по их именам, или даже передавать все именованные параметры.

...