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:

??知乎问题:回调函数是什么

原文地址:https://www.cnblogs.com/ygming/p/8340686.html

时间: 2024-10-11 06:33:57

Node.js前置知识点(一):回调函数的相关文章

Node.js:创建应用+回调函数(阻塞/非阻塞)

一.创建应用 如果我们使用PHP来编写后端的代码时,需要Apache 或者 Nginx 的HTTP 服务器,并配上 mod_php5 模块和php-cgi.从这个角度看,整个"接收 HTTP 请求并提供 Web 页面"的需求根本不需要 PHP 来处理. 不过对 Node.js 来说,概念完全不一样了.使用 Node.js 时,我们不仅仅在实现一个应用,同时还实现了整个 HTTP 服务器.事实上,我们的 Web 应用以及对应的 Web 服务器基本上是一样的. 在我们创建 Node.js

深入理解Node.js基于事件驱动的回调

回调和异步调用的关系 首先明确一点,回调并非是异步调用,回调是一种解决异步函数执行结果的处理方法.在异步调用,如果我们希望将执行的结果返回并且处理时,可以通过回调的方法解决.为了能够更好的区分回调和异步回调的区别,我们来看一个简单的例子,代码如下: function waitFive(name, function_name){ var pus = 0; var currentDate = new Date(); while(pus < 5000){ var now = new Date(); p

js表单提交回调函数

在研究表单的时候发现一个有意思的东西——在表单提交的时候如何保证数据全部提交完毕才会清空? 我们常用的<input type="reset" value="重置" />,或者jquery的$('input[name=xxx]')val(''),直接清空input的value值,都是单纯的直接清空,不会等待数据提交完毕后在清空,所以会有数据传输没完成就清空的情况,怎么解决? 搜索的时候发现一个答案——写一个回调函数,感觉不严谨.先记录下来,以后慢慢研究.

【Javascript】Js同步异步以及回调函数

一.前言 今天查看了requireJs方面的知识,看着看着就看到了JS中同步与异步操作的知识点,经过查阅了很多的资料,基本了解了JS的同步与异步的操作,其中涉及到的知识点如下: 什么时同步和异步? JS的是基于事件驱动的单线程语言,为啥会有异步操作这种多线程的操作??? 浏览器线程,浏览器内核线程间的合作? JS的异步操作都有哪些?它是如何工作的? 二.js单线程 JS的单线程 单线程的含义是js只能在一个线程上运行,也就是说,同一时间只能做一件事情,其他的任务则会放在任务队列里面排队等等js线

Node.js的知识点框架整理

背景:因为appium是基于Node.js的,所以想看一下Node.js.但是发现很多资料的顺序看起来有点颠倒.然后就一面看资料一面整理了一下大概的知识点框架,希望对自己对别人有用. 本文不包含node.js的基本语法.node.js的基本语法和JavaScript基本一样,可以以后再单独整理一份基本语法的. Node.js是一个基于chrome V8的JavaScript运行时的环境 Node.js是事件驱动,非阻塞式I/O模型 Node.js使用npm包管理器 使用Node.js不仅实现了一

node.js的作用、回调、同步异步代码、事件循环

http://www.nodeclass.com/articles/39274 一.node.js的作用 I/O的意义,(I/O是输入/输出的简写,如:键盘敲入文本,输入,屏幕上看到文本显示输出.鼠标移动,在屏幕上看到鼠标的移动.终端的输入,和看到的输出.等等) node.js想解决的问题,(处理输入,输入,高并发 .如 在线游戏中可能会有上百万个游戏者,则有上百万的输入等等)(node.js适合的范畴:当应用程序需要在网络上发送和接收数据时Node.js最为适合.这可能是第三方的API,联网设

Async.js解决Node.js操作MySQL的回调大坑

因为JavaScript语言异步特性.在使用Node.js运行非常多操作时都会使用到回调函数,当中就包含訪问数据库.假设代码中的业务逻辑略微复杂一点,回调一层层嵌套.那么代码非常easy进入Callback Hell,不管对写代码的人还是阅读代码的人,都是精神上的折磨. 比如对MySQL的一个事务操作,插入一条posts并插入一条log: var title = 'It is a new post'; connection.beginTransaction(function(err) { if

【node.js】模块系统、函数

为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统. 一个 Node.js 文件就是一个模块,这个文件可能是JavaScript 代码.JSON 或者编译过的C/C++ 扩展. 创建模块 在 Node.js 中,创建一个模块非常简单,如下我们创建一个 'hello.js' 文件,代码如下: var hello = require('./hello'); hello.world(); 以上实例中,代码 require('./hello') 引入了当前目录下的hello.

[Node.js] 闭包和高阶函数

原文地址:http://www.moye.me/2014/12/29/closure_higher-order-function/ 引子 最近发现一个问题:一部分写JS的人,其实对于函数式编程的概念并不是太了解.如下的代码片断,常常让他们觉得不可思议: OAuth2Server.prototype.authCodeGrant = function (check) { var self = this; return function (req, res, next) { new AuthCodeG