Здесь я вижу два вопроса:
- почему в javascript возможно передать функцию обратного вызова в качестве переменной или простого объекта (без параметров) другой функции.
Поскольку функции являются объектами первого класса, мы можем передать функцию в качестве аргумента в другую функцию, а затем выполнить эту переданную функцию или даже вернуть ее для выполнения позже.
Подробнее здесь: https://javascriptissexy.com/understand-javascript-callback-functions-and-use-them/
Ниже показано, что функции также являются просто объектами:
function hello() {
return 'hello';
}
hello.other = 'world';
console.log(hello() + ', ' + hello.other);
- как именно этот обратный вызов возвращает мой пользовательский объект, как я это сделалне указывать возвращаемую функцию внутри
callback(user)
или указывать какое-либо тело функции для моего обратного вызова.
setTimeout(()...)
функция неявно ничего не возвращает, она просто регистрирует функцию, котораявыполнит позже.Когда функция, зарегистрированная в setTimeout, срабатывает, она вызывает callback(user)
, и это разрешает getUser
зарегистрированную функцию, которая регистрируется на консоли.Помните, что обратные вызовы асинхронны.
Функции имеют неявные возвраты, если не указано, что возвращает undefined
, что означает, что вы не возвращали явно.
Ниже приведен пример:
function hello() {
console.log('Hello, World');
}
console.log(hello()); // undefined.
function hi() {
return 'Hi, World';
}
console.log(hi()); // Hi, World.