对于刚学JS的初学者来说(包括我现在的自己),对于这个回调函数真的是踩坑无数,于是乎想作为一个淋过雨的人,想为后面刚入门的人打一把伞。
本文不会用专业的知识词汇,只会用口语来简单让你有一个概念帮你浅浅的理解这个名词,如果你是一个学习JS刚遇到这个名词,正处于一脸懵逼的状态,那么本文对于会有帮助,但如果你想要研究更深层次的原理,用法和含义,可能本文不适合你。
废话不多说,让我们先看MDN的解释。
这段话,首先我们要搞懂一个东西,什么是实参。
我们都知道,函数可以接受参数,形参和实参。那么什么是形参呢?
相信大家已经在无数网站看到过无数过这个例子了,计算两个数字的和,但是丝毫不影响它的经典简单易懂。
那么当你在定义这个函数的时候,A,B就是形参。参数可以拿来用,你也可以不用。形 参,形式上的参数,并没有实际意义,只是帮你完成函数内部逻辑运算而设置的。
那么什么是实参呢?
还是这段代码,当你调用函数的时候,这个1,2就是实参。
对于刚入门的你可以暂不深究,你可以这样简单的理解。
OK,那么我们回过头来研究我们的标题内容:什么是回调函数。
说人话就是, 一个函数A,作为另一个函数B的参数,那么函数A就被称为回调函数。
对,回调函数A就是一个普普通通的函数,它被其他函数B作为参数在B的内部调用,那么在这个时候A才能被称为B的回调函数。
回调函数这个概念是相互的,一个单独的函数是无法叫做回调函数的,它只能被称为XXX(被谁在内部调用)的回调函数。我相信大部分人都是迷惑在这里了。我们再举一个栗子。
我们经常会在教程视频中听到setTimeout函数的解释是这样的,setTImeout接收一个回调函数作为参数........确实这句话对于刚开始学习到这一步的我真的是一脸懵逼,什么是回调函数?我去,之前怎么没遇到过,什么玩意啊?
大家不要忘了setTimeout本身就是一个函数,它就是我们刚刚在上面说的函数B,那么函数A就是这个东西:
所以这句话正确的语意应该是:setTimeout作为一个函数B,它接收另一个函数A作为它的参数来使用。设计者想了想,这样说好像 太麻烦,于是就把函数A叫做回调函数。(函数A叫做函数B的回调函数!!!)
本人也是初次学习JS,仅代表个人意见,如有错误,还望各位大佬指教,我定虚心改正。