回调函数 callback
如果你去看菜鸟的教程,它会告诉你:
“回调函数就是一个函数,它是在我们启动一个异步任务的时候就告诉它:等你完成了这个任务之后要干什么。这样一来主线程几乎不用关心异步任务的状态了,他自己会善始善终。”
这句话非常正确,但重要的只有第一句,即,回调函数就是一个函数。整个回调函数需要理解的,也就只有这一句话。
callback
callback在这里是一个参数名,它可以是任何名字,zhangSan、liSi、wangErMaZi……,但它作为参数时,含义就是“函数类型”。
举个例子,在java中,我们定义变量之前要声明变量的类型,在写函数时要声明返回类型和参数类型……
在下面这段代码中,写了一个名为intToString的函数,这个函数的返回值的类型是"String",传入的参数类型是"Integer",b作为一个"Integer"类型的变量,被传入函数intToString函数中,其返回的"String"类型的返回值被c所接收。
public String intToString (Integer a){
return a.toString();
}
Integer b = 0;
String c = intToString(b);
System.out.println(c);
JavaScript作为一种弱类型语言,在定义变量时不需要声明变量类型,直接使用关键字var去声明新的变量。在书写函数的时候,也不需要声明传入的参数的类型,直接使用传入的参数即可。
function fun(a,b,c){
a += 5;
b = "这是b:" + b;
console.log(a,b,c);
}
fun(1,"aaa",NaN);
这么做的优点是非常方便使用,不用去考虑参数的类型,其缺点则是会因为类型不清导致出现预料之外的值。有兴趣的同学可以看看这个视频,这是一个因为弱类型导致的b站崩溃的事故。
2021.07.13 B站是这样崩的
言归正传,当callback在出现在参数列表的时候,我们并不知道它是一个什么类型的参数,但当我们把它作为函数使用的时候,它就一定是一个函数了!
function fun(callback,a,b,c){
a += 5;
b = "这是b:" + b;
console.log(a,b,c);
callback(c);
}
function callBackFun(a){
console.log("这是一个函数!" + a);
}
fun(callBackFun,1,2,3);
后记
这是我在自学js基础的过程中,碰到的一个比较特殊的功能,这种将函数作为参数使用的情况,在其他语言中不太常见,导致理解起来会有一些困难。菜鸟的教程讲的并不好,所以只能在互联网上搜索相关的教程来看,如果有什么错误的地方,欢迎各位大佬指正!另外,如果你看不懂,那一定是我的文笔有问题,不要怀疑自己~