目录

Callback(回调)是什么?

Callback 是什么?

callback 是一种特殊的函数,这个函数被作为参数传给另一个函数去调用。这样的函数就是回调函数。

callback 拆开,就是 call back,在英语里面就是「回拨电话」的意思。

那我们就用打电话为例子来说明一下 callback:

  1. 「我打电话给某某」(I call somebody),那么「打电话」的人就是「我」。
  2. 「我」在电话里说:你办完某事后,回拨电话给「我」。
  3. 某某做完事后,就会「回拨电话给我」(calls back to me),那么「打电话」的人就是「某某」。

用编程来解释的话,是这样的:

  1. 「我调用一个函数 f」(I call a function),那么「调用函数」的人是「我」。代码是 f(c)。
  2. 「我」让这个函数 f 在执行完后,调用我传给它的另一个函数 c。
  3. 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。

什么是异步任务呢?且听下回分解。

饥人谷一直致力于培养有灵魂的编程者,打造专业有爱的国内前端技术圈子。如造梦师一般帮助近千名不甘寂寞的追梦人把编程梦变为现实,他们以饥人谷为起点,足迹遍布包括facebook、阿里巴巴、百度、网易、京东、今日头条、大众美团、饿了么、ofo在内的国内外大小企业。 了解培训课程:加微信 xiedaimala03,官网:https://jirengu.com

本文作者:饥人谷方应杭老师