Обратные вызовы используются, потому что функция должна быть вызвана - код должен выполняться - в какой-то неопределенной точке в будущем.Простое выполнение кода в JavaScript всегда будет выполнять его немедленно.Это не полезно, если вам нужно выполнить какое-то асинхронное задание, а затем что-то сделать.
Например, setTimeout()
принимает обратный вызов, потому что ему нужно подождать, а затем делают что-то:
//In about 1500 ms setTimeout will call this ()=>{} function
setTimeout(() => {
console.log("finished")
}, 1500)
Возможность передавать такую функцию очень гибкая, поскольку функция также может принимать аргументы и возвращать значения, которые могут быть определены во время вызова функции.Это было бы намного сложнее или было бы невозможно, если бы код не был организован в функции.
Если я просто передал выражение напрямую, оно выполняется немедленно:
// console.log runs immediately, there's not way to defer it.
setTimeout( console.log("finished")
, 1000)
Таким образом, функция не просто представляет некоторый код, она представляет действие, которое можно назвать .Он может быть вызван вами или другой функцией, такой как setTimeout или HTTP-запросом в определенное время.