Javascript设计模式与开发实践:读书笔记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: https://blog.yodfz.com/frontEnd/2020/11/17.html
更先进的语法可以参考 Proxy 与 Reflect。
函数柯里化(function currying)
currying又称部分求值。一个currying的函数首先会接受一些参数,接受了这些参数之后,该函数并不会立即求值,而是继续返回另外一个函数,刚才传入的参数在函数形成的闭包中被保存起来。待到函数被真正需要求值的时候,之前传入的所有参数都会被一次性用于求值。
函数节流
函数节流的目的在于节约设备资源,控制触发量。核心思维就是 在固定的时间内仅触发一次。如果在固定时间内已经触发了一次,那么剩余的请求都会被放弃。
分时函数
延迟当前函数的执行,如果该次延迟还没有完成,那么忽略接下来该函数的请求。
惰性加载函数
惰性加载函数是由于后续方法依赖客户端环境或者前置性需求,造成无法统一给出代码。
那么就由惰性加载函数去处理这些前置需求。
在一些环境判断做JS库垫片上可以应用。