Функция внутри getData
- это обратный вызов, передаваемый в setTimeout
, который является одним из способов запланировать вызов функции в будущем. В этом случае он запрашивает обратный вызов примерно через 100 мс. getData
возвращается до того, как это произойдет.
Обратный вызов setTimeout
является закрытием ¹ в контексте, в котором он создан, что означает, что он имеет доступ к cb
даже после возврата getData
. Поэтому, когда таймер браузера вызывает обратный вызов, обратный вызов может вызвать cb
. Вызов cb
использует литерал объекта для создания объекта для передачи cb
.
При вызове getData
автор передает функцию как cb
, которая регистрирует полученные данные.
Итак:
getData
вызывается, передавая функцию, которая будет записывать полученный аргумент.
getData
вызывает setTimeout
для планирования обратного вызова примерно через 100 мс, передавая другую функцию для вызова таймера.
getData
возвращается.
Примерно через 100 мс подсистема таймера браузера инициирует вызов обратного вызова, переданного на setTimeout
.
Этот обратный вызов создает объект и вызывает cb
, передавая объект ему.
Этот обратный вызов (тот, что передан getData
) регистрирует data
объект, который он получает.
¹ "закрытие" & mdash; см: SO , мой анемичный блог