高阶函数
可以把函数作为参数传给另一个函数
// filterfunction filter (array, fn) {let results = []for (let i = 0; i < array.length; i++) {if (fn(array[i])) {results.push(array[i])}}return results}// 测试let arr = [1, 3, 4, 7, 8]let r = filter(arr, function (item) {return item % 2 === 0})console.log(r)
可以把函数作为另一个函数的返回结果
// once,使fn只执行一次的函数function once (fn) {let done = falsereturn function () {if (!done) {done = truereturn fn.apply(this, arguments) //apply此处作用是调用fn,调用fn时,需要把function的参数带上,所以使用arguments。arguments是调用一个函数时的参数,是一个伪数组}}}let pay = once(function (money) {console.log(`支付: ${money} RMB`)})pay(5)pay(5)pay(5)pay(5)
gaoj
高阶函数的意义
- 使我们专注于目标
- 高阶函数是用来抽象通用的问题
- 让函数变得更灵活
