javascript - 为什么回调必须是一个函数?
问题描述
我继续看到:
() => execute code
而不仅仅是
execute code
在回调中。我没有传入任何参数,那么为什么 () => 执行代码有效但执行代码无效?因为一个函数只代表几行代码,所以它们不是一回事吗?我在其他语言中看到类似的东西,比如使用 lambda 的 java
谢谢你。
解决方案
使用回调是因为函数需要在未来某个不确定的时间点被调用——代码需要执行。简单地在 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 请求调用。
推荐阅读
- html - Xamarin 表单:根据 HTML 数据在 UI 中显示标题、副标题和编号点
- php - 如何从 php 中的多个数组中查找特定值?
- angular - 刷新HTML组件Angular 6
- reactjs - 我创建了一个反应项目并进行了路由。在路由中,我正在努力解决语法错误
- typescript - 知道为什么 sinon 不生成 xml 响应对象吗?
- json - 使用 elasticsearch 查询完整的 JSON 对象
- java - 无法建立新的drools规则,错误:规则编译错误:!!!超过 65535 字节限制
- mysql - 使用分组表获取前 n 条记录
- python - 关于 Python Pandas,删除行
- powerbi - 根据排序删除重复项