近期在看到jQuery中test(index,test)的用法涉及到回调函数,之前未有涉及,于今晚专门看看了看,将个人对于回调函数的理解感悟记录一下,有不正确的地方希望指出。
回调函数(callback),英文中的解释其实更容易理解:A callback is a function that is passed as an argument to another function and is executed after its parent function has completed.下面我以拙劣的英文翻译下,回调函数是指函数b被当做函数a的参数使用,且当函数a执行完毕后才会执行函数a。
这里说个题外话,异步async/同步sync
举个栗子:
1.异步:早上起来拉屎,擦屁股,这个肯定是要拉完屎才能擦屁股,不能一边拉屎一边擦屁股,这样擦屁股就没有任何意义,这就是异步。
2.同步:早上起床,你可以坐在马桶上一边拉屎一边抠鼻屎,二者没有任何影响,可同时进行,上下通透,这就是 同步。
来段异步代码示例:
栗子 结果以上代码会先执行函数a,而且不会等到a中的延迟函数执行完才执行函数b, 在延迟函数被触发的过程中就执行了函数b,当js引擎的event 队列空闲时才会去执行队列里等待的setTimeout的回调函数,这就是一个异步的例子。
所以即使,时间设置为0,也是会照样先执行函数b
来段同步代码示例
结果输出1
print函数会等change函数完成之后去执行,所以结构输出为1,因为change函数修改了全局变量a的值,change执行之后才执行的print函数。
回到回调函数的正题。下面再举个从其他博主那里看到的栗子(果然别人家的栗子好吃):
举个现实的例子:约会结束后你送你女朋友回家,离别时,你肯定会说:“到家了给我发条信息,我很担心你。”对不,然后你女朋友回家以后还真给你发了条信息。小伙子,你有戏了。
其实这就是一个回调的过程。你留了个函数b(要求女朋友给你发条信息)给你女朋友,然后你女朋友回家,回家的动作是函数a。她必须先回到家以后,函数a的内容执行完了,再执行函数b,然后你就收到一条信息了。
这里必须清楚一点:函数b是你以参数形式传给函数a的,那么函数b就叫回调函数。
相信到这里大家已经对callback有一定的认识了,下面上代码:
function shit(clean_ass)
{
alert("我是函数shit");
alert("shit完我会调用clean_ass来清理我的菊花");
clean_ass();
}
function clean_ass(){
alert("我要清理我的菊花了");
}
function all_action(){
shit(clean_ass);
}
这样你就完成了拉屎的动作(先拉屎,后清理菊花),如有疏漏之处,烦请指出。
网友评论