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
本文介绍了如何通过函数式编程减少副作用,使用闭包将全局变量转换为局部变量。示例中展示了一个函数,该函数可以灵活地进行日志打印和数组排序,并且没有副作用。在示例中,我们定义了loggerComparer函数,它接受日志打印和比较函数作为参数,返回一个新的排序函数。此外,还创建了一个createComparer函数用于根据条件生成升序或降序比较器。在处理数组时,使用闭包记录比较次数,并展示了如何应用这些概念来操作数组。
1442

被折叠的 条评论
为什么被折叠?



