Callback 是什么?
callback 是一种特殊的函数,这个函数被作为参数传给另一个函数去调用。这样的函数就是回调函数。
callback 拆开,就是 call back,在英语里面就是「回拨电话」的意思。
那我们就用打电话为例子来说明一下 callback:
- 「我打电话给某某」(I call somebody),那么「打电话」的人就是「我」。
- 「我」在电话里说:你办完某事后,回拨电话给「我」。
- 某某做完事后,就会「回拨电话给我」(calls back to me),那么「打电话」的人就是「某某」。
用编程来解释的话,是这样的:
- 「我调用一个函数 f」(I call a function),那么「调用函数」的人是「我」。代码是 f(c)。
- 「我」让这个函数 f 在执行完后,调用我传给它的另一个函数 c。
- f 执行完的时候,就会「调用 c」,也叫做「回调 c」(call c back),调用 c 的人是 f。
好了,解释完了:callback 就是(传给另一个函数调用的)函数。
把括号里面的内容去掉,简化成:callback 就是一种函数。
Callback 很常见
$button.on('click', function(){})click 后面的 function 就是一个回调,因为「我」没有调用过这个函数,是 jQuery 在用户点击 button 时调用的。
div.addEventListener('click', function(){})click 后面的 function 也是一个回调,因为「我」没有调用过这个函数,是浏览器在用户点击 button 时调用的。
一般来说,只要参数是一个函数,那么这个函数就是回调。
Callback 有点反直觉
很多初学者不明白 callback 的用法,因为 callback 有一点「反直觉」。
比如说我们用代码做一件事情,分为两步:step1( ) 和 step2( )。
符合人类直觉的代码是:
step1()
step2()
callback 的写法却是这样的:
step1(step2)为什么要这样写?或者说在什么情况下应该用这个「反直觉」的写法?
一般(注意我说了一般),在 step1 是一个异步任务的时候,就会使用 callback。
什么是异步任务呢?且听下回分解。
欢迎进群与我探讨技术,戳此扫码加微信进程序员分享交流群。
本文作者方应杭,未经同意禁止转载,转载请联系本人并加上版权声明和群链接。