TypeScript应用 极速上手(8)

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DreamCatcher

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值