JS回调函数

JavaScript018

JS回调函数,第1张

回调函数可以继续扩展一个函数的功能,可以是程序非常灵活。

比如:

function showDiv(callback){

$("#div1").show()

callback($("#div1"))

}

showDiv(function($div){

$div.text("hello world")

})

//原本showDiv的功能就是现实一个div,加了callback函数当参数后就可以在执行完show之后改变div中的文字。

一般来说,callback函数用在异步中的例子比较多,因为在异步调用中,只能通过回调函数继续执行某个动作。

例如:

function myThread(callback){

return setTimeout(1000*10,function(){

$("#div").append("<p>hello</p>")//10秒后在div中加一个行,然后在执行callback函数

callback()

})

}

我的理解就是你调用别人,然后别人会调用你,简言之:你写一个函数,但不是由你调用。

通常这种函数有一定的命名约束好让别人知道该调用哪个。比如说ajax的异步

看到过CSDN一个很有意思的比喻:

你饿了,想吃饭,就一会去问你妈一声"开饭没有啊?"这就正常函数调用.

但是今天你妈包饺子,花的时间比较长,你跑啊跑啊,就烦了.于是你给你妈说,我先出去玩会,开饭的时候打我手机.等过了一阵,你妈给你打电话说"开饭啦,快回来吃饭吧!"

其中,你告诉你妈打手机找你,就是个你把回调函数句柄保存到你妈的动作.你妈打电话叫你,就是个回调过程.

函数实际上是对象:它们能被“存储”在变量中,能作为函数参数被传递,能在函数中被创建,能从函数中返回

因为函数在Javascript中是第一类对象,我们像对待对象一样对待函数,因此我们能像传递变量一样传递函数,在函数中返回函数,在其他函数中使用函数。当我们将一个回调函数作为参数传递给另一个函数是,我们仅仅传递了函数定义。我们并没有在参数中执行函数。我们并不传递像我们平时执行函数一样带有一对执行小括号()的函数。

像之前的例子一样,第一种方法就是匿名函数作为回调(使用了参数位置定义的匿名函数作为回调函数)。第二种方式就是命名函数作为回调(定义一个命名函数并将函数名作为变量传递给函数)