函数柯里化

本文探讨了JavaScript函数柯里化的基础知识,包括普通柯里化实现和进阶版本,展示了如何通过柯里化增强函数封装与性能优化。同时,通过实例讲解了进阶面试中遇到的柯里化技巧,并比较了其在DOM操作中的性能影响。

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

通过函数柯里化加强对js函数的认识。

普通柯里化

      function a(b: number) {
        return function (c: number) {
          return b + c;
        };
      }
      a(1)(2);

进阶柯里化

      function add(...args: any) {
        return args.reduce((a: any, b: any) => a + b, 0);
      }
      function b(func: any) {
        const args: any[] = [];
        return function result(...rest: any[]) {
          // rest拿到的是数字
          if (rest.length === 0) {
            return func(...args);
          } else {
            args.push(...rest);
            return result;
          }
        };
      }
      let sum = b(add);
      sum(1)(2)(3); // 未计算(延迟计算的作用)
      sum(1)(2)(3)(); // 计算

进阶面试

      function c(...arg: any) {
        const _args = Array.prototype.slice.apply(arg);
        let _add = (...args: any) => {
          _args.push(...args);
          return _add;
        };
        _add.toString = () => {
          return _args.reduce((a: any, b: any) => a + b, 0);
        };
        return _add;
      }
      console.log(c(1, 2, 4)()(3)(2)(1).toString());

相对于dom操作函数柯里化对性能的影响可以基本忽略不计。
通过对函数柯里化的认识也使得对函数的封装能力有了进一步的提升。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值