最近学习js的异步执行,用到回调函数,对这个机制不是很理解,故查了一些资料,在此整理分享一下自己的理解。
维基百科对回调函数的定义:
在计算机程序设计中,回调函数,或简称回调(Callback 即call then back 被主函数调用运算后会返回主函数),是指通过函数参数传递到其它代码的,某一块可执行代码的引用。这一设计允许了底层代码调用在高层定义的子程序。
知乎上一个网友提供的生动描述:
你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。
自己的理解:按维基百科的说明理解起来是将回调函数(代码块),作为参数传递给调用函数,由调用函数执行回调函数的代码逻辑。这和函数的调用似乎没有多大区别。但感觉这不像是回调函数,原因是没有突出‘回调’二字。在js中结合回调函数应用的上下文概念,回调函数作为参数似乎只是传递了一个函数指针(函数名)给调用函数,调用函数会触发回调函数到定义其的上下文中去执行。就像饭点到了,你自己没备蔬菜,邻居叫你过去,前一种理解似乎是这样,你等着,他家做好饭你一起吃。后一种是他做好了你打包了一份,带回家吃。自己倾向于后一种理解,原因是调用的函数不需要知道回调函数要做什么,只要知道他的名字,通知他做就好了。
理解的还不是很透彻,希望大家多多指教。