JavaScript中的函数作值

1,035 阅读1分钟

在JS中,函数名本身就是变量,那么可以像参数一样把一个函数传递给另一个函数,而且可以将一个函数作为另一个函数的结果返回。 举例:

function mainFunction (testFunction, arg) {
    return testFunction(arg)
}

上面这个函数接受两个参数。第一个参数是一个函数,第二个参数是传递给第一个参数函数的值。然后来定义传递的函数:

function testFunction(name) {
   return 'hello ' + name 
}

调用主函数:

let callName = mainFunction(testFunction, 'kuma')
console.log(callName) // 'hello kuma'

函数作参数实际应用的并不多,我们常用的可能是一个函数中返回另一个函数。 例如有一个对象数组,我们需要按照某个对象属性进行排序,如果用sort方法,里面的比较函数要接收两个参数,即比较的值。

可以定义一个函数,接收属性名,然后传递给函数里面的比较函数,然后返回结果,再将结果返回给sort方法。举例:

function arraySort(key) {
  return function(obj1, obj2) {
    let val1 = obj1[key],
        val2 = obj2[key];
    if(val1 < val2) {
      return -1
    }else if(val1 > val2) {
      return 1
    }else {
      return 0
    }
  }
}

const arr = [{name: 'Bob', age: 18}, {name: 'Alex', age: 15}, {name: 'Carter', age: 30}]
//按name排序
console.log( arr.sort(arraySort('name')) )
//按age排序
console.log( arr.sort(arraySort('age')) )

当然,函数里面返回函数,最常见的应该是闭包,这里不再赘述,有机会以后再单独说明.