什么是回调函数:回调函数就是一个被作为参数传递的函数,回调函数的使用可以大大提升编程的效率,这使得它在现代编程中被非常多地使用。
<script language="javascript"> 02 function SortNumber( obj, func ) // 定义通用排序函数 03 { 04 // 参数验证,如果第一个参数不是数组或第二个参数不是函数则抛出异常 05 if( !(obj instanceof Array) || !(func instanceof Function)) 06 { 07 var e = new Error(); // 生成错误信息 08 e.number = 100000; // 定义错误号 09 e.message = "参数无效"; // 错误描述 10 throw e; // 抛出异常 11 } 12 for( n in obj ) // 开始排序 13 { 14 for( m in obj ) 15 { 16 if( func( obj[n], obj[m] ) ) // 使用回调函数排序,规则由用户设定 17 { 18 var tmp = obj[n]; // 创建临时变量 19 obj[n] = obj[m]; // 交换数据 20 obj[m] = tmp; 21 } 22 } 23 } 24 return obj; // 返回排序后的数组 25 }
我们先来看看回调的英文定义:A callback is a function that is passed as an argument to another function and is executed after its parent function has completed。
字面上的理解,回调函数就是传递一个参数化的函数,就是将这个函数作为一个参数传到另一个主函数里面,当那一个主函数执行完之后,再执行传进去的作为参数的函数。走这个过程的参数化的函数 就叫做回调函数。换个说法也就是被作为参数传递到另一个函数(主函数)的那个函数就叫做 回调函数。
举一个别人举过的例子:约会结束后你送你女朋友回家,离别时,你肯定会说:“到家了给我发条信息,我很担心你。” 对不,然后你女朋友回家以后还真给你发了条信息。小伙子,你有戏了。其实这就是一个回调的过程。你留了个参数函数(要求女朋友给你发条信息)给你女朋友,然后你女朋友回家,回家的动作是主函数。她必须先回到家以后,主函数执行完了,再执行传进去的函数,然后你就收到一条信息了。 回调函数应用场景多用在使用 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或者匿名函数就被称为回调函数。
二,回调函数的参数在调用回调函数内部创建。
回调函数应用场景多用在使用 js 写组件时,尤其是组件的事件很多都需要回调函数的支持。