在js中很多时候一说起回调,印象中立马就出现了异步的场景,实际上印象中的是异步回调,只是回调中的一种,当然除了异步还有同步。同步回调,说起来总是感觉怪怪的,主要是混淆了回调和异步的概念,或是对回调的定义不是很清楚,只不过印象中让他们等价了callback==async
。既然只是名字而,那么首先要清楚callback和async的定义。
callback回调
在计算机程序设计中,回调函数,或简称回调(Callback 即call then back 被主函数调用运算后会返回主函数),是指通过函数参数传递到其它代码中的,某一块可执行代码的引用(维基)
简单来说,就是将函数A作为参数传递到函数B中,调用函数B时,函数A会被执行,那么我们就称函数A为回调函数。
使用场景
同步回调
function A() {console.log('a')}function B(callback) { console.log('B') callback && typeof callback === 'function' && callback(); }B(A)
异步回调
$('#id').click(function() { console.log('clicked')})
所以callback不一定用于异步,一般同步的场景下也经常会用到回调,尤其想javascript这种函数是一等公民的编程语言,函数最为参数传来传去很常见。同时javascript作为基于事件的异步编程语言,异步回调也是最常见的用法。
常见的异步场景
- 定时函数 setTimeout, setInterval, process.next等
- on事件监听,subscribe事件订阅
- promise异步编程