В приведенном ниже примере.lname
является функцией обратного вызова внутри fname
функции.
Нет, это не так.Вы вызываете lname
(потому что вы добавили круглые скобки) и передаете результат его вызова (который оказывается undefined
, как в случае, когда функция явно не return
)значение) до fname
.Также как Math.floor(Math.sqrt(10))
- здесь нет обратных вызовов.Существует большая разница между fname(lname())
и fname(lname)
: последняя передает саму функцию в другую функцию;и мы назовем его «обратным вызовом», если он на самом деле вызывается обратно.
Насколько я понимаю, функция обратного вызова lname
должна быть выполнена, как только функция fname
будет завершена..
Опять нет.Обратный вызов выполняется, когда он вызывается, ни больше, ни меньше.Например:
function printsSomething() {
console.log("Something");
}
function invokesCallbackAtEnd(callback) {
console.log("invokesCallbackAtEnd doing something");
callback();
}
function invokesCallbackAtStart(callback) {
callback();
console.log("invokesCallbackAtStart doing something");
}
function invokesCallbackAtStartAndEnd(callback) {
callback();
console.log("invokesCallbackAtStartAndEnd doing something");
callback();
}
function invokesCallbackNever(callback) {
console.log("invokesCallbackNever doing something");
}
invokesCallbackAtEnd(printsSomething); console.log("---");
invokesCallbackAtStart(printsSomething); console.log("---");
invokesCallbackAtStartAndEnd(printsSomething); console.log("---");
invokesCallbackNever(printsSomething); console.log("---");