美文网首页
高阶函数

高阶函数

作者: ByePast | 来源:发表于2020-04-10 11:57 被阅读0次

    什么是高阶函数

    高阶函数的维基百科定义:至少满足以下条件之一:

    • 接受一个或多个函数作为输入;
    • 输出一个函数;

    例子

    function add (x, y, fn) {
      return fn(x) + fn(y);
    }
    
    var x = -5,
      y = 6,
      fn = Math.abs
    
    add(x, y, fn)  // 11
    

    高阶函数的好处

    // 正常函数
    function isType (obj, type) {
      return Object.prototype.toString.call(obj).includes(type)
    }
    
    let type = 'xxx'
    let is = true
    console.log(isType(type, 'String')) // true
    console.log(isType(type, 'Boolean')) // false
    console.log(isType(is, 'Bolean')) // false,这里因为写错了才为 false
    // 假如不小心把 Boolean 写错了 Bolean,没注意,这也不会报错还会安装平常返回判断,但是这可能是错的,很多时候这种错误是不容易发现
    

    其实可以换种写法,但是注意⚠️写类型列表时没有写错就可以避免上面的情况
    下面是高阶函数写法

    // 高阶函数
    function isType (type) {
      return function (obj) {
        return Object.prototype.toString.call(obj).includes(type)
      }
    }
    
    const types = ['String', 'Object', 'Array', 'Null', 'Undefined', 'Boolean']
    let fns = {}
    types.forEach(type => fns[`is${type}`] = isType(type))
    
    let type = 'xxx'
    let is = true
    console.log(fns.isString(type)) // true
    console.log(fns.isBoolean(type)) // false
    console.log(fns.isBolean(type)) // fns.isBolean is not a function
    // 这里一样是把 Boolean 写成了 Bolean,但是这里就报错让我们可以发现这里写错了,而不是像上面那样,还以为是正常的
    

    相关文章

      网友评论

          本文标题:高阶函数

          本文链接:https://www.haomeiwen.com/subject/hryruhtx.html