Javascript设计模式与开发实践:读书笔记(2) 高阶函数

552 阅读2分钟

高阶函数 (Higher-order function)

高阶函数(Higher-order function)是指至少满足下列条件之一的函数。

  • 函数可以作为参数被传递;
  • 函数可以作为返回值输出。

举例子,函数可以作为参数被传递。

function aFn(callback) {
    callBack&&callBack();
}

function bFn(n) {
    return n+1;
}

aFn(bFn)

在这个范例里面,aFn就是一个高阶函数,因为他可以接收一个函数作为参数。

另外一个,函数可以作为返回值输出,就更简单了,在上一节里面讲到的闭包就是如此。

每个产生闭包的函数都是高阶函数。

面向切面编程(AOP)

使用装饰函数实现AOP:

var check(fn) {
    return (a,b) => {
        // 切面处理
        if (a<b) {
            throw new Error('无法处理')
        }
        return fn(a,b);
    }
}

check((a,b)=>{
    return 1
})


check((a,b)=>{
    return 2
})

使用js装饰器实现AOP:  blog.yodfz.com/frontEnd/20…

更先进的语法可以参考 Proxy 与 Reflect。

函数柯里化(function currying)

currying又称部分求值。一个currying的函数首先会接受一些参数,接受了这些参数之后,该函数并不会立即求值,而是继续返回另外一个函数,刚才传入的参数在函数形成的闭包中被保存起来。待到函数被真正需要求值的时候,之前传入的所有参数都会被一次性用于求值。

函数节流

函数节流的目的在于节约设备资源,控制触发量。核心思维就是 在固定的时间内仅触发一次。如果在固定时间内已经触发了一次,那么剩余的请求都会被放弃。

分时函数

延迟当前函数的执行,如果该次延迟还没有完成,那么忽略接下来该函数的请求。

惰性加载函数

惰性加载函数是由于后续方法依赖客户端环境或者前置性需求,造成无法统一给出代码。

那么就由惰性加载函数去处理这些前置需求。

在一些环境判断做JS库垫片上可以应用。

link: blog.yodfz.com/admin/write…