javaScript函数柯里化

1,什么是函数的柯里化

柯里化(Currying)的理念,是将一个接受多个参数的函数转换成一系列使用一个参数的函数的技术。在js中,柯里化可以创建更灵活、可复用的函数。函数柯里化的关键点在于,函数里面返回函数,从而做到参数复用的目的。

2,函数柯里化的实现

1,简单的柯里化实现

    function curryAdd(a) {
        return function(b) {
            return a + b;
        };
    }
    
    const addFive = curryAdd(5);
    console.log(addFive(3)); // 8

2,通用的柯里化实现

function curry(fn) {  // 柯里化函数接受一个函数作为参数
        if (fn.length === 0) {  // 如果函数不接受任何参数,则直接返回
            return fn;
        }
        return function curried(...args) {  // 返回一个新的函数,该函数接受任意数量的参数
            if (args.length >= fn.length) {  // 如果传入的参数数量大于或等于原函数所需的参数数量
                return fn.apply(this, args);  // 则调用原函数并传入参数
            } else {
                return function(...args2) {  // 否则,返回一个新的函数,继续接受参数
                    return curried.apply(this, args.concat(args2));  // 将之前和新传入的参数合并后递归调用
                };
            }
        };
    }
    // 定义一个原始函数 greet,接受两个参数:name 和 greeting
    function greet(name, greeting) {
        return `${greeting}, ${name}!`;
    }
    // 使用 curry 函数对原始函数 greet 进行柯里化
    const curriedGreet = curry(greet);
    const greetzs = curriedGreet('张三');
    console.log(greetzs('李四')); //"李四', 张三!"

3,常见面试题

实现一个函数,使得满足下面的要求:

add(1)(2)(3)(4)//输出10

add(1,2)(3)(4)//也输出10

add(1)(2,3)(4)//也输出10

具体代码

<script>
    function add() {  // 声明一个 add 函数
        let args = Array.prototype.slice.call(arguments)  // 将传入的参数转换为数组
        console.log(args)  // 打印参数数组
        let inner = function () {  // 声明一个inner闭包函数
            args.push(...arguments)  // 将传入的参数追加到 args 数组中
            return inner  // 返回 inner 函数本身,以支持链式调用
        }
        inner.toString = function () {  // 重写 inner 函数的 toString 方法
            let sum = args.reduce((prev, cur) => {  // 使用 reduce 方法计算 args 数组中元素的总和
                return prev + cur
            })
            return sum.toString()  // 将求和结果转换为字符串并返回
        }
        console.log(inner)  // 打印 inner 函数
        return inner  // 返回 inner 函数
    }
    let result = add(1)(2)(3)(4)
    console.log(parseInt(result))
</script>

总结:函数柯里化是将接受多个参数的函数转换为逐个接受参数并返回新函数的过程,以提高函数的灵活性和复用性。

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值