一、包含函数参数的函数是高阶函数。

二、返回值是函数的函数是高阶函数。

三、例1:异步请求成功或者失败后调用函数,回调函数

// 参数callback为一个函数

function getUserInfo (userId, callback) {

  $.ajax({

    type: 'GET',

    url: 'http://xxx.com/getUserInfoById?userId=' + userId,

    success: function (result) {

      if (typeof callback === 'function') {

        callback(result)

      }

    }

  })

}

四、数组的sort方法接受的参数也是一个函数。

五 、例2:函数节流

function throttle (fn, interval) {

  let _fn = fn

  let timer

  let isFirstCall = true

  return function () {

    let args = arguments

    let _this = this

    if ( isFirstCall ) {

      _fn.apply(_this, args)

      isFirstCall = false

      return false

    }

    if (timer) {

      return false

    }

    timer = setTimeout(function () {

      clearTimeout(timer)

      timer = null

      _fn.apply(_this, args)

    }, interval || 800)

  }

}