在javascript中回调函数非常重要,它们几乎无处不在。像其他更加传统的编程语言都有回调函数概念,但是非常奇怪的是,完完整整谈论回调函数的在线教程比较少,倒是有一堆关于call()和apply()函数的,或者有一些简短的关于callback的使用示例。
首先你得先明白一点:

函数也是对象

 想弄明白回调函数,首先的清楚地明白函数的规则。先来看个例子:

//可以这样创建函数
var fn = new Function("arg1", "arg2", "return arg1 * arg2;");
fn(2, 3);   //6

 这样做的一个好处,可以传递代码给其他函数,也可以传递正则变量或者对象(因为代码字面上只是对象而已)。
在javascript中,函数是比较奇怪的,但它确确实实是对象。确切地说,函数是用Function()构造函数创建的Function对象。Function对象包含一个字符串,字符串包含函数的javascript代码。

理解了函数也是对象,先不急聊回调函数,先看看下面代码:

function say (value) {alert(value);
}
alert(say);
alert(say('hi js.'));

只写变量名 say 返回的将会是 say方法本身,以字符串的形式表现出来。
而在变量名后加()如say()返回的就会使say方法调用后的结果,这里是弹出value的值。

js中函数可以作为参数传递

再看下面两段代码:

function say (value) {alert(value);
}
function execute (someFunction, value) {someFunction(value);
}
execute(say, 'hi js.');

function execute (someFunction, value) {someFunction(value);
}
execute(function(value){alert(value);}, 'hi js.');

上面第一段代码是将say方法作为参数传递给execute方法
第二段代码则是直接将匿名函数作为参数传递给execute方法

实际上:

function say (value) {alert(value);
}
// 注意看下面,直接写say方法的方法名与下面的匿名函数可以认为是一个东西
// 这样再看上面两段代码是不是对函数可以作为参数传递就更加清晰了
say;function (value) {alert(value);
}

这里的say或者匿名函数就被称为回调函数!

如果还不懂,看看下面并不是很完美的比喻:
你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。

回调函数容易混淆点——传参

两种回调函数传参的方法:

  • 将回调函数的参数作为与回调函数同等级的参数进行传递

  • 回调函数的参数在调用回调函数内部创建


希望我对回调函数的一点点小总结能对大家有帮助,
关于回调函数还有什么问题可以在下面留言,一起交流。

彻底理解JavaScript中回调函数 (推荐)相关推荐

  1. javascript中回调函数的理解和应用

    一. 什么是回调函数? 被作为实参传入另一函数,并在该外部函数内被调用,用以来完成某些任务的函数,称为回调函数. function f1(fn) {let a =1;console.log(a,'a' ...

  2. 有关JavaScript中回调函数的所有内容!

    作者:Shadeed 译者:前端小智 来源:dmitripavlutin 点赞再看,微信搜索**[大迁世界],B站关注[前端小智]**这个没有大厂背景,但有着一股向上积极心态人.本文 GitHub h ...

  3. 理解javascript中的函数模式

    1.回调函数 将一个函数作为参数传给另一个函数,我们称它为回调函数 function test1(callback){//执行脚本//执行回调函数 callback();} 2.即时函数(自执行匿名函 ...

  4. 理解javascript中的回调函数(callback)【转】

    在JavaScrip中,function是内置的类对象,也就是说它是一种类型的对象,可以和其它String.Array.Number.Object类的对象一样用于内置对象的管理.因为function实 ...

  5. 理解javascript中的回调函数(callback)

    理解javascript中的回调函数(callback) 在JavaScrip中,function是内置的类对象,也就是说它是一种类型的对象,可以和其它String.Array.Number.Obje ...

  6. php event loop,理解javascript中的事件循环(Event Loop)

    背景 在研究js的异步的实现方式的时候,发现了JavaScript 中的 macrotask 和 microtask 的概念.在查阅了一番资料之后,对其中的执行机制有所了解,下面整理出来,希望可以帮助 ...

  7. JavaScript:回调函数(callback)

    前言 callback,大家都知道是回调函数的意思.如果让你举些callback的例子,我相信你可以举出一堆.但callback的概念你知道吗?你自己在实际应用中能不能合理利用回调实现功能? 我们在平 ...

  8. 浅析 JavaScript 中的 函数 uncurrying 反柯里化

    柯里化 柯里化又称部分求值,其含义是给函数分步传递参数,每次传递参数后部分应用参数,并返回一个更具体的函数接受剩下的参数,这中间可嵌套多层这样的接受部分参数函数,直至返回最后结果. 因此柯里化的过程是 ...

  9. 如何用JavaScript的回调函数做出承诺

    by Adham El Banhawy 由Adham El Banhawy 如何用JavaScript的回调函数做出承诺 (How to make a Promise out of a Callbac ...

最新文章

  1. 致谢 开源开发者的贡献_对开源做出的贡献如何使我成为更好的开发人员,以及如何做到这一点...
  2. 【Redis学习笔记】2018-05-30 Redis源码学习之Ziplist、Server
  3. 人脸对齐--Face Alignment at 3000 FPS via Regressing Local Binary Features
  4. 独家 | 深度学习基础——激活函数以及什么时候使用它们?(附代码)
  5. 谷歌自动驾驶是个大坑,还好中国在构建自己的智能驾驶大系统
  6. linux64命令,每天一个Linux命令(64)shutdown命令
  7. 启动 Eclipse 弹出“Failed to load the JNI shared library jvm.dll”错误的解决方法!
  8. linux dns已经配置,linux DNS 配置
  9. Python正则表达式介绍 re.findall(pattern, str, flag=0)/re.I re.L re.M
  10. LeetCode算法入门- 3Sum Closest -day10
  11. 注解形式控制器 数据验证,类型转换(3)
  12. 微软总裁呼吁:AI刷脸,美国政府该管一管了
  13. 使用 Hibernate 二级缓存的步骤
  14. md5值是什么?md5值有什么用?
  15. 删除后别人的微信号变成wxid_微信偷偷更新:终于能改微信号,每年改一次
  16. jenkins+Xcode+蒲公英实现ipa自动打包发布全攻略
  17. 网站维护怎么做?网站维护内容有哪些
  18. Recorder丨Unity官方录屏插件使用介绍
  19. 3.10Hello,C语言君
  20. 关注我的微信公众帐号小q机器人(xiaoqrobot)

热门文章

  1. 基于1.3.3版本tooltip的datagrid单元格tip实现
  2. hdu 1495 非常可乐(BFS)
  3. 无标题窗体的移动及其简单美化
  4. GNOME Menu File Browser-快速导航用户目次
  5. 关于ASP.NET控件DropDownList控件的问题
  6. 汇编伪指令EVEN(数据对齐的伪指令,使得下一个变量的起始地址是偶数字节的)
  7. XWiki 11.1 发布,协作式应用开发平台
  8. 【Leetcode】79.单词搜索
  9. spring Cache /Redis 缓存 + Spring 的集成示例
  10. WPF DataGridRow Event