什么是回调函数
详细
回调函数就是一个通过函数指针调用的函数。把函数的指针 (内存地址) 作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,指向的函数就是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。(以上节选自百度百科)
理解
js中函数也是对象,把函数所存储在的 ==内存地址== 作为参数传递给另一个函数,当这个地址被调用时所指向的函数,就是回调函数。
简略
被作为函数的参数进行传递的函数,就是回调函数
什么是高阶函数
高阶函数是一个 接收函数作为参数或将函数作为输出返回 的函数
几行代码理解 回调 和 高阶
function fun(val) {
console.log(val)
};
function fn(callback) {
let num = 10;
callback(num);
};
fn(fun);
代码输出的结果是 10,下面是我理解的执行详细步骤
- 调用 fn函数,实参为 fun函数
- 执行 fn函数, callback 作为函数形参
- 声明一个变量 num 并赋值为 10
- 调用 callback 的回调函数 fun,实参是 num 值为10
- 执行 fun回调函数,接收参数 num 并打印,所以结果为 10
总结
回调函数
上面代码 fun函数 被作为 fn函数 的参数进行调用 根据回调函数的定义 ==被作为函数的参数进行传递的函数为回调函数== 所以 fun 就是 回调函数
高阶函数
上面代码 fn函数 的参数为 fun函数 根据高阶函数的定义 ==接收函数作为参数的函数为高阶函数== 所以 fn 就是 高阶函数
闭包函数
为什么还要提一下闭包呢?
不难看出,上面代码 回调函数fun 访问到了 fn函数 作用域内的变量 num,这在js作用域链是不被允许的,==只有闭包才可以突破作用域链,将函数内部的变量和方法传递到外部,让外部函数可以访问到内部函数的变量和方法。==,但回调函数也访问到了,因此 回调函数 也是 闭包函数