js中回调函数(callback)的一些理解
前言
我个人在学习Node.js相关知识时遇到了回调函数这个概念,虽然之前已经在c,c++等编程语言中用到过它,但还一直未对其机制有深入了解,这次就来好好谈一下它。
概念理解
百度对它的解释是回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
Google里的解释是A callback is a function that is passed as an argument to another function and is executed after its parent function has completed.
字面上的理解,回调函数就是一个参数,将这个函数作为参数传到另一个函数里面,当那个函数执行完之后,再执行传进去的这个函数。这个过程就叫做回调。
这里我想把它通俗化来讲,小时候大家应该都有自己喜欢看的动画片,但是平时上学期间我们都会被家长“严格管制”。下午放学回家后,爸妈会让自己先写完作业才能看电视里放的动画片。
其实这就是一个回调的过程。你建了个函数b(看动画片),但前提是要写完作业,写作业的过程相当于执行函数a。在现实生活中你要写完作业才能看动画片,即在执行过程中需要等函数a执行完之后才能执行函数b。
不过必须清楚一点:函数b是以参数形式传给函数a的,b是回调函数。
简单的例子
function a(callback){
alert("这是first函数a");
var x =1;
var y=2;
return callback(x,y);
}
function b(x,y){
alert("这是回调函数b");
return x+y;
}
$(function(){
var result = a(b);
alert("result = "+ result);
});
输出结果为:
这是first函数a
这是回调函数b
result = 3
这里函数首先执行了first函数a,之后调用了回调函数b,最后返回函数a的返回值。
回调函数的种类(按功能划分)
1.同步回调
它是一种阻塞式回调,比方说一段代码逻辑没有执行完毕,代码会一直等待,而不会去执行下一段代码逻辑。
2.异步回调
它是一种非阻塞式回调,比方说一段代码逻辑没有执行完毕,代码执行可以不卡在这块不动,而是可以去执行下一段代码逻辑。
二者根本区别
在同步回调里,回调函数的调用一定发生在主函数返回之前。
在异步回调里,回调函数的调用有可能是在起始函数返回之后。
应用场景
回调函数应用场景多用在使用 js 写组件时,尤其是组件的事件很多都需要回调函数的支持。
最后,本人之前接触js并不算很多,所以具体应用问题还需实践检验。
js中回调函数(callback)的一些理解的更多相关文章
- node.js 中回调函数callback(转载),说的很清楚,看一遍就理解了
最近在看 express,满眼看去,到处是以函数作为参数的回调函数的使用.如果这个概念理解不了,nodejs.express 的代码就会看得一塌糊涂.比如: 复制代码 代码如下: app.use(fu ...
- C++中回调函数(CallBack)的使用
如果试图直接使用C++的成员函数作为回调函数将发生错误,甚至编译就不能通过. 其错误是普通的C++成员函数都隐含了一个传递函数作为参数,亦即“this”指针,C++通过传递this指针给其成员函数从而 ...
- JS中回调函数的写法
<!DOCTYPE HTML> <html><head> <meta charset="GBK" /><title>回 ...
- js中回调函数,promise 以及 async/await 的对比用法 对比!!!
在编程项目中,我们常需要用到回调的做法来实现部分功能,那么在js中我们有哪些方法来实现回调的? 方法1:回调函数 首先要定义这个函数,然后才能利用回调函数来调用! login: function (f ...
- JS 自定义回调函数callback
1 应用场景:js的异步加载,在get,post,ajax异步加载的时候,可能对应的请求没有完成,这时需要使用请求回来的数据作为参数调用其他函数,这时就需要使用回调函数. 2 回调函数作用:等待函数调 ...
- 回调函数 callback 的简单理解
回调函数指当我执行完某一段代码之后在回过头来调用 jquery 最简单的例子 $(".className").each(function(i){alert(i)}) 她这个形参i是 ...
- [js]js中回调函数
//回调函数: 把一个函数当参数传给另个函数 /* function f1() { console.log('f1'); } function f2(f) { f(); console.log(1); ...
- js中回调函数写法
第一种方式 function studyEnglish(who){ document.write(who+"学习英语</br>"); } function study( ...
- JS中回调函数的简单用法
a能拿b,b能拿到c,c能拿到d,实现a拿到d的东西. function a() { b(function (data) { console.log(data); }); } function b(c ...
随机推荐
- 洛谷 题解 P4158 【[SCOI2009]粉刷匠】
状态: dp[i][j][k][0/1]: 到达第i行时, 到达第j列时, 刷到第k次时, 这一格有没有刷对 转移 换一块木板时肯定要多刷一次 dp[i][j][k][0]=max(dp[i-1][m ...
- C语言课程设计
目录 实现目的 游戏玩法介绍 实现流程与作品架构 任务列表及贡献度 总结感想 作品源码与仓库地址(附页) 资料引用与出处(附页) 实现目的 2048,作为一款极其经典的游戏,从发行到现在,已经有了极多 ...
- Android5以后WebView闪退问题
Android4.4开发项目中的webview在Android各个版本运行的飞起,可是项目升级,最低版本适配5.0之后,webview各种闪退问题 真让人头大!!!!!!!!!!!!!!! 啊啊啊啊啊 ...
- [转帖]密钥库文件格式(Keystore)和证书文件格式(Certificate)
密钥库文件格式[keystore]代码 https://blog.csdn.net/zzhongcy/article/details/22755317 格式 : JKS 扩展名 : .jks/.ks ...
- java中讲讲DataInputStream的用法,举例?
[学习笔记] 2.4 DataInputStream的用法 马 克-to-win:DataInputStream顾名思义:就是专门用来读各种各样的数据的,比如(int,char,long等),一定要注 ...
- System memory 259522560 must be at least 4.718592
[学习笔记] /*没有下面的话, 会报一个错误,java.lang.IllegalArgumentException: System memory 259522560 must be at least ...
- 报错Could not find resource cn/smbms/dao/provider/ProviderMapper.xml
原因:由于idea不会编译src下的java目录下的xml文件,所以找不到xml文件 方案一:在pom.xml中添加如下内容 <build> <resources> <r ...
- Netty源码剖析-启动服务
参考文献:极客时间傅健老师的<Netty源码剖析与实战>Talk is cheap.show me the code! --1主线分两步: 一:首先在our thread里,如果写在mai ...
- (十二)springMvc 处理图片,视频等文件的上传
文章目录 导包 修改表单类型 配置解析器 处理上传的图片 补充一个自己写的工具类 导包 需要导入如下的包 commons-fileupload-1.3.3.jar commons-io-2.6.jar ...
- Secret的三种形式
Secret ConfigMap这个资源对象是Kubernetes当中非常重要的一个对象,一般情况下ConfigMap是用来存储一些非安全的配置信息,如果涉及到一些安全相关的数据的话用ConfigMa ...