在javascript中回调函数很是重要,它们几乎无处不在。像其余更加传统的编程语言都有回调函数概念,可是很是奇怪的是,完完整整谈论回调函数的在线教程比较少,却是有一堆关于call()和apply()函数的,或者有一些简短的关于callback的使用示例。
首先你得先明白一点:javascript
想弄明白回调函数,首先的清楚地明白函数的规则。先来看个例子:java
//能够这样建立函数 var fn = new Function("arg1", "arg2", "return arg1 * arg2;"); fn(2, 3); //6
这样作的一个好处,能够传递代码给其余函数,也能够传递正则变量或者对象(由于代码字面上只是对象而已)。
在javascript中,函数是比较奇怪的,但它确确实实是对象。确切地说,函数是用Function()构造函数建立的Function对象。Function对象包含一个字符串,字符串包含函数的javascript代码。编程
理解了函数也是对象,先不急聊回调函数,先看看下面代码:app
function say (value) { alert(value); } alert(say); alert(say('hi js.'));
只写变量名 say 返回的将会是 say方法自己,以字符串的形式表现出来。
而在变量名后加()如say()返回的就会使say方法调用后的结果,这里是弹出value的值。编程语言
再看下面两段代码:函数
function say (value) { alert(value); } function execute (someFunction, value) { someFunction(value); } execute(say, 'hi js.');
与spa
function execute (someFunction, value) { someFunction(value); } execute(function(value){alert(value);}, 'hi js.');
上面第一段代码是将say方法做为参数传递给execute方法
第二段代码则是直接将匿名函数做为参数传递给execute方法code
实际上:对象
function say (value) { alert(value); } // 注意看下面,直接写say方法的方法名与下面的匿名函数能够认为是一个东西 // 这样再看上面两段代码是否是对函数能够做为参数传递就更加清晰了 say; function (value) { alert(value); }
这里的say或者匿名函数就被称为回调函数!blog
若是还不懂,看看下面并非很完美的比喻:
你到一个商店买东西,恰好你要的东西没有货,因而你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,而后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫作触发了回调关联的事件,店员给你打电话叫作调用回调函数,你到店里去取货叫作响应回调事件。
两种回调函数传参的方法:
将回调函数的参数做为与回调函数同等级的参数进行传递
回调函数的参数在调用回调函数内部建立
但愿我对回调函数的一点点小总结能对你们有帮助,关于回调函数还有什么问题能够在下面留言,一块儿交流。