函数作为参数和返回值使用

92 阅读1分钟

引言:

  • 在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()
  1. foo() 函数内部定义了 bar() 函数
  2. foo() 将内部函数 bar 作为返回值
  3. 外部通过 var fn = foo() 获取到这个内部函数
  4. 最后通过 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
  1. 工厂函数makeAdder是一个创建加法器的工厂函数

  2. 闭包形成:内部函数add记住了外部函数makeAdder的参数count

  3. 实际应用

    • var add5 = makeAdder(5)创建了一个固定加5的函数
    • add5(6)返回11(5+6)
    • add5(10)返回15(5+10)

高阶函数: 把一个函数如果接受另一个函数作为参数,或者该函数会返回另一个函数作为返回值的函数,那么这个函数就是高阶函数