前言
因为开始了解和学习 Node.js,发现在使用之前,有必要先知道一些前置的知识点(其实是关于操作系统的知识),主要包括:
什么是 回调函数(callback);
什么是 同步 / 异步;
什么是 I/O;
什么是 单线程 / 多线程;
什么是 阻塞 / 非阻塞;
什么是 事件 和 事件驱动;
什么是 基于事件驱动的 回调;
什么是 事件循环;
一 什么是 回调函数(callback)
我觉得理解一个概念,应该是从简单到复杂,从应用到原理,从现象到本质,简言之,就是从浅入深.
所以,让我们先从表面入手,回调函数,可以先粗浅的理解为:
A "callback" is any function that is called by another function which takes the first function as a parameter.
即:在一个函数中调用另外一个函数就是 callback
如以下简单的代码,就是一个 回调函数的例子:
function callback() {
alert("I am in the callback!");
}
function work(func) {
alert("I am calling the callback!");
func();
}
work(callback);
上面的例子里,callback 函数作为一个变量,传入函数 work 中;
并且在 work 中被调用.
所以结论 1:
回调函数就是,可以被当做变量--传入给其他函数 B 调用的--函数 A;
二 回调函数的 流程 & 应用
从上文我们知道,回调函数其实 就是 传入其他主体函数 的函数变量,
知道了概念,接下来我们再明确一下 回调函数的工作流程:
S1 创建一个函数 A, 它可以用来做加法;
S2 创建一个延时函数 B,可计算时长(实际都有 库函数提供的 API 实现);
S3 我们把 A 传入 B,作为参数,这一步就叫做 登记回调函数;
S4 在 B 里调用执行力 传入的函数 A, 这一步就叫做 调用回调函数;
以上我们就创建了回调函数 A, 它实现的功能就是:
在 10s 后, 返回一个执行了加法操作的 结果;
要实现这个功能其实很简单,那么我们为什么要引入 回调函数呢?
这就得提到 抽象的作用了.
在上面的例子里,A 的作用是执行一个加法运算,但是如果我们是想做乘法,除法,排序等等其他操作呢? B 的作用是延时,但如果是想要 响应点击,提交等其他事件呢?
所以,引入回调函数:是为了我们能够根据传入函数 A 功能的不同,方便的执行更广泛,更灵活的功能要求,而且还能保持代码的整洁和维护.
以上就是对回调函数的理解.(其实也涉及到了事件的概念)
最后再上一个通俗的解释,以便理解:
你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货.
在这个例子里,你的电话号码就叫回调函数;
你把电话留给店员就叫登记回调函数,
店里后来有货了叫做触发了回调关联的事件,
店员给你打电话叫做调用回调函数,
你到店里去取货叫做响应回调事件.
三 Refernce:
知乎问题: 回调函数是什么
来源: http://www.bubuko.com/infodetail-2472951.html