图和代码都来源于维基百科点击打开链接
JS实现:
function someAction(x, y, someCallback) {
return someCallback(x, y);
}
function calcProduct(x, y) {
return x * y;
}
function calcSum(x, y) {
return x + y;
}
python实现:
def get_square(val):
""" the callback """
return val ** 2
def caller(func, val):
return func(val)
caller(get_square, 5)
原理其实一样,
回调函数(callback)是什么? - no.body的回答-知乎
在这篇文章的启发中,拿JS举例,比如我是起始函数,调用者,我调用了someAction(x,y,someCallback)方法(中间函数),那么我需要像这个函数传入前两个参数值,和一个方法,比如我传入了(4,5,calcProduct),那么我相当于有了calcProduct这个方法的指针,并向他传递了x,y参数,而我并没有直接调用这个方法,是中间函数调用了calcproduck方法(这个方法就是回调函数)。
这么做的好处在于,我任何一个方法满足func(x,y)格式,我都可以通过中间函数someAction去调用,我作为起始函数(主程序)
通过一个函数,实现了多个功能。
那么回到text()、html() 以及 val() 的回调函数 中来
以text()举例,在我们传入一个字符串参数的时候,会对当前id的文本设置为我们想要的文本,
那如果向text()函数中传入一个回调函数呢,
$("#test2").text(function{
return i;})
果然没有反应,那就说明我们这个函数格式不符合他的中间函数的格式
那我们传入两个参数试试,换一种更加易懂的方式,我们先定义回调函数func(i,k),再使用中间函数text()调用func函数。
$("#btn1").click(function(){
function func(i,k){return i+k;}
$("#test1").text(func);
OK 可以了,我们发现输出的文本i为0(被选元素列表中当前元素的下标), K是我们原来的文本值(假设为初始),
那么点击一次文本就会变成0初始,再次点击,就是00初始,以此类推,那么看来text(),html(),val()这三个函数中定义的中间函数,是用来获取我们想要的文本(当然得和原文本有关啦,没关系那还不如直接修改呢)。
至此,(我认为),中间函数(目前用到的)定义了函数与参数的关系,而回调函数定义了参数本身的处理方式。那么只要这个函数与参数的关系和回调函数本身参数处理方式的格式一样,就可以callback了,中间函数call回调函数告知参数,格式匹配地话,回调函数callback处理结果。