首页 > 解决方案 > 为什么回调必须是一个函数?

问题描述

我继续看到:

() => execute code

而不仅仅是

execute code 

在回调中。我没有传入任何参数,那么为什么 () => 执行代码有效但执行代码无效?因为一个函数只代表几行代码,所以它们不是一回事吗?我在其他语言中看到类似的东西,比如使用 lambda 的 java

谢谢你。

标签: javascriptcallbackinvocationfunction-reference

解决方案


使用回调是因为函数需要在未来某个不确定的时间点被调用——代码需要执行。简单地在 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 请求调用。


推荐阅读