2021-07-29 11:08:52 +08:00
|
|
|
|
---
|
|
|
|
|
title: 23-高阶函数
|
|
|
|
|
publish: true
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
<ArticleTopAd></ArticleTopAd>
|
|
|
|
|
|
|
|
|
|
|
2020-07-04 20:37:20 +08:00
|
|
|
|
## 高阶函数
|
|
|
|
|
|
|
|
|
|
### 高阶函数的概念
|
|
|
|
|
|
|
|
|
|
当 函数 A 接收函数 B 作为**参数**,或者把函数 C 作为**返回值**输出时,我们称 函数 A 为高阶函数。
|
|
|
|
|
|
|
|
|
|
通俗来说,高阶函数是 对其他函数进行操作 的函数。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 高阶函数举例1:把其他函数作为参数
|
|
|
|
|
|
|
|
|
|
```js
|
|
|
|
|
function fn1(a, b, callback) {
|
|
|
|
|
console.log(a + b);
|
|
|
|
|
// 执行完上面的 console.log() 语句之后,再执行下面这个 callback 函数。也就是说,这个 callback 函数是最后执行的。
|
|
|
|
|
callback && callback();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn1(10, 20, function () {
|
|
|
|
|
console.log('我是最后执行的函数');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
打印结果:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
30
|
|
|
|
|
我是最后执行的函数
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 高阶函数举例2:把其他区函数作为返回值
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```js
|
|
|
|
|
function fn1() {
|
|
|
|
|
let a = 20;
|
|
|
|
|
|
|
|
|
|
return function () {
|
|
|
|
|
console.log(a);
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const foo = fn1(); // 执行 fn1() 之后,会得到一个返回值。这个返回值是函数
|
|
|
|
|
foo();
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
上面的代码,产生了闭包现象。关于闭包,详见下一篇文章《JavaScript基础/闭包.md》。
|