在Javascript中,函数是第一类对象,这意味着函数可以像对象一样按照第一类管理被使用。既然函数实际上是对象:它们能被“存储”在变量中,能作为函数参数被传递,能在函数中被创建,能从函数中返回。
回调函数是从一个叫函数式编程的编程范式中衍生出来的概念。简单来说,函数式编程就是使用函数作为变量。
学过C#的同学是不是很熟悉,没错,和委托有异曲同工之妙。同样是将函数(方法)作为参数传递。
我们来瞧一瞧在JQuery中常见的一个回调:
//注意到click方法中是一个函数而不是一个变量
//它就是回调函数
$("#btn").click(function() {
alert("Btn has Clicked");
});
正如你在前面的例子中看到的,我们将一个函数作为参数传递给了click方法。click方法会调用(或者执行)我们传递给它的函数。这是Javascript中回调函数的典型用法,它在jQuery中广泛被使用。
好了,理解了基本的概念,我们创建一个回调的案例。
//该函数的作用是获取一个在arg1和arg2之间的随机数
function TestRandom(arg1, arg2, callback){
var num = Math.ceil(Math.random() * (arg1 - arg2) + arg2);
if ( typeof callback=== "function"){ //判断callback是一个函数
callback(num); //执行回调函数
}
}
//如同编写JQuery一样的语法
TestRandom(10, 20, function(num){
console.log("Callback called! Num: " + num); //结果为10和20之间的随机数
});
那么什么地方需要用到回调呢? 当函数的实现过程非常漫长,你是选择等待函数完成处理,还是使用回调函数进行异步处理呢?这种情况下,使用回调函数变得至关重要,例如:AJAX请求。若是使用回调函数进行处理,代码就可以继续进行其他任务,而无需空等。实际开发中,经常在javascript中使用异步调用,甚至在这里强烈推荐使用!
文章评论