1、函数式编程
减少函数的副作用,要充分利用闭包的能力,把一些状态的全局变量转变为局部变量。
2、实例
定义一个函数,既可以通过不同的方式打印日志,也可以对数组进行排序。并没有副作用。
//函数式编程:减少函数的副作用。
//定义一个函数,既可以通过不同的方式打印日志,也可以对数组进行排序。并没有副作用。
function loggerComparer(
logger:(a:number,b:number) => void,
comp:(a:number,b:number)=> number
){
//返回一个函数
return (a:number,b:number) => {
logger(a,b) //打印日志
return comp(a,b) //排序比较
}
}
//定义一个比较函数
function createComparer(p:{smallerFirst:boolean}){
if(p.smallerFirst){
return (a:number,b:number) => a-b
}else {
return (a:number,b:number) => b-a
}
}
function processArray(a:number[]){
let comCount = 0;
//闭包
const logger = (a:number,b:number) => {
//自由变量
comCount++
}
const comp = createComparer({smallerFirst:true})
a.sort(loggerComparer(logger,comp))
return comCount
}
let a = [1,3,5,9,12,19,79]
const compCount = processArray(a)
console.log(a) //[1, 3, 5, 9, 12, 19, 79]
console.log('compare count',compCount)// "compare count", 6