引言:
- 在JavaScript中,函数是非常重要的,并且是一等公民:
- 那么就意味着函数的使用是非常灵活的;
- 函数可以作为另外一个函数的参数,也可以作为另外一个函数的返回值来使用;
- 自己编写高阶函数
- 使用内置的高阶函数
- 示例:
函数作为参数使用
function calc(num1, num2, calcFn) {
console.log(calcFn(num1, num2))
}
function add(num1, num2) {
return num1 + num2
}
function sub(num1, num2) {
return num1 - num2
}
function sub(num1, num2) {
return num1 = num2
}
function mul(num1, num2) {
return num1 * num2
}
var m = 20
var n = 30
calc(20, 30, add); // 输出50
calc(20, 30, sub); // 输出-10
函数作为返回值使用
注意:js语法允许函数内部再定义函数
function foo() {
function bar() {
console.log("bar")
}
return bar
}
var fn = foo()
fn()
foo()函数内部定义了bar()函数foo()将内部函数bar作为返回值- 外部通过
var fn = foo()获取到这个内部函数 - 最后通过
fn()执行这个内部函数,输出 "bar"
function makeAdder(count) {
function add(num) {
return count + num
}
return add
}
var add5 = makeAdder(5)
console.log(add5(6)) // 输出11
console.log(add5(10)) // 输出15
-
工厂函数:
makeAdder是一个创建加法器的工厂函数 -
闭包形成:内部函数
add记住了外部函数makeAdder的参数count -
实际应用:
var add5 = makeAdder(5)创建了一个固定加5的函数add5(6)返回11(5+6)add5(10)返回15(5+10)
高阶函数: 把一个函数如果接受另一个函数作为参数,或者该函数会返回另一个函数作为返回值的函数,那么这个函数就是高阶函数