回调函数

来源:互联网 发布:网络水军怎么找 编辑:程序博客网 时间:2024/06/05 16:23

一直对回调函数一知半解,今天晚饭后碰到了回调函数,顺便查了查资料,整理如下:

主要信息来自https://www.zhihu.com/question/19801131

例1、来看这么个过程:假如你要买一个包包,但是你喜欢的那款包断货了,柜姐留下了你的电话并承诺一到货就会通知你。后来包包到货了,柜姐打了你的电话,你去店里去了货。
那么在上述事件中,你的电话号码就是回调函数你把电话留给柜姐就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,柜姐给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件

例2、运行程序的时候,应用需要调用库的接口,此时,如果库要求应用先传递一个函数或参数,这个被传入后来又被调用的函数就称为回调函数(callback function)。就像例子1,柜姐在到货的时候会通知你,但你得先留下你的号码以用于通知。因此,回调函数就成了一个高层调用底层(不仅仅是库函数),底层再过来用高层的过程。故而,函数如其名,古人诚不我欺。也可以说,回调函数的精妙之处在于“程序可以在运行时,通过登记不同的回调函数,来决定、改变中间函数的行为”。这是因为,在上层调用底层函数,而底层函数在做这个事情的时候,自身的信息不够,而上层函数有这个信息,因此,根据信息的不同,就可以实现不同的函数行为。

例3、function callback() { 

 alert("I am in the callback!");
}
function work(func) { 
alert("I am calling the callback!"); 
func(); 
}

work(callback);
这是一个简单的回调例子,callback作为一个变量传入work中被work调用。

例4、举个简单的例子 对一个文件的读入如果不用callback
fileObject = open(file)# 我们必须等到文件打开才能进行读入 在这之前我们不能做其他事情fileObject.write("We are writing to the file.")

使用callback

# 我们把writeToFile 为一个function 传入open writeToFile就是一个callback functionfileObject = open(file, writeToFile)# 我们不需要一直等着这个文件打开# 文件打开的时候 他就会执行callback 也就是writeToFile(具体实现 可以用promise) 在这之前