# 高阶函数
# 高阶函数的概念
- 1、一个函数返回一个函数。
- 2、一个函数可以接收函数作为参数。
上述两个条件只要满足一个就可以称作高阶函数,回调函数是高阶函数的一种。
# 高阶函数的应用
那高阶函数有什么实际应用呢?可以扩展方法,比如我们有一个core函数,定义如下
// ... 剩余运算符将args转变成一个数组
function core(...args) {
// 核心代码
console.log("core",args)
// ...
}
1
2
3
4
5
6
2
3
4
5
6
我们想给core函数增加一些额外的逻辑,但是,我们并不想更改core函数里面的代码,因为里面的代码改动的影响很大。我们可以创建一个 before函数。before函数接收一个回调函数作为参数。
剩余运算符和扩展运算符的学习链接 (opens new window)
在函数调用的时候 ... 称为:扩展运算符 在函数定义或者声明时候 ... 称为:剩余运算符
Function.prototype.before = function(cb) {
// 这个函数就是newCore ...args 是剩余运算符 传入的a,b 参数会被放入数组中
return (...args) => {
console.log(args[0]) // a
console.log(args[1]) // b
cb()
// 调用时候使用扩展运算符传递参数
// 箭头函数没有自己的this会沿着作用域链向上查找
this(...args)
}
}
// 调用
let newCore = core.before(() => {
console.log("before")
})
// 调用这个函数
newCore("a", "b")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
有了高阶函数,方便对原有函数进行扩展。