回调机制
把函数作为参数,传递给另一个函数,延迟到另一个函数的某个时刻执行的过程叫回调。
回调函数的本质是一种模式(一种解决常见问题的模式),或一种机制,因此回调函数的实现方式也被称为回调模式或回调机制。
设计思想
当我们把一个回调函数作为参数传递给另一个函数时,我们只传递了这个函数的定义,并没有在参数中执行它,而在包含函数的函数体内的某个位置被执行,就像回调函数在包含函数的函数体内被定义一样。
设计要点
- 在支持函数式编程的语言中,可以使用回调函数实现。作为参数传递的函数称为回调函数,接收回调函数(参数)的函数称为高阶函数或包含函数。
- 在只支持面向对象编程的语言中,可以使用策略模式来实现回调机制。
优缺点
优点:
- 避免重复代码
- 增强代码的可维护性
- 有更多定制的功能
缺点:
可能出现“回调地狱”的问题,即多重的回调函数调用
回调在异步中的应用
程序的执行方式分两种,同步执行、异步执行
- 同步执行:只有前一个任务执行完毕,才能执行后一个任务
- 异步任务:前一个还没执行完成,就可以执行后一个任务
异步执行的实现方式有两种:一种是通过多线程的方式(一个任务开一个新的线程),另一种是通过多任务的方式(如JS的异步就是通过基于任务队列的事件循环来实现的)。
异步调用经常用在一些比较耗时的任务上,如 I/O 操作、网络请求等。
应用场景
- 在第三方库和框架中
- 异步执行
- 在需要更多通用功能的地方,更好地实现抽象