Node.js前置知识点(一):回调函数
前言
因为开始了解和学习Node.js,发现在使用之前,有必要先知道一些前置的知识点(其实是关于操作系统的知识),主要包括:
- 什么是 回调函数(callback);
- 什么是 同步/异步;
- 什么是 I/O;
- 什么是 单线程/多线程;
- 什么是 阻塞/非阻塞;
- 什么是 事件 和 事件驱动;
- 什么是 基于事件驱动的 回调;
- 什么是 事件循环;
本文就是系列文章的第一篇,用来介绍回调函数。(参考来源 见文末的 Reference)
一 什么是 回调函数(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:
知乎问题:回调函数是什么