Некоторые комментарии, детализирующие контракт функции 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(...)
.