You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

闭包实现lazyAdder函数求助:三级调用无法返回正确求和数值

如何用闭包实现lazyAdder函数(三次调用求和)

正确实现代码

这里提供两种直观的实现方式:

箭头函数简洁版

const lazyAdder = firstNum => secondNum => thirdNum => firstNum + secondNum + thirdNum;

普通函数版(清晰展示闭包逻辑)

function lazyAdder(firstNum) {
  // 闭包保存第一个传入的数值
  return function(secondNum) {
    // 闭包保存前两个传入的数值
    return function(thirdNum) {
      // 最终返回三个数的求和结果
      return firstNum + secondNum + thirdNum;
    }
  }
}

验证测试

用你提供的示例验证功能:

// 示例1
let firstAdd = lazyAdder(1);
let secondAdd = firstAdd(2);
let sum = secondAdd(3);
console.log(sum); // 输出6

// 示例2
let func1 = lazyAdder(10);
let func2 = func1(20);
let total = func2(3);
console.log(total); // 输出33

你的代码问题分析

你写的代码:

const lazyAdder = f => g => h => x => f(g(h))(h(x));

存在两个致命问题:

  1. 层级冗余:需求是三次调用后返回结果,但你写了4层箭头函数,导致第三次调用后返回的还是一个等待x参数的函数,永远拿不到求和结果。
  2. 逻辑错误:f、g、h都是你传入的数字,并非函数,f(g(h))这种把数字当函数调用的写法完全不成立,运行时会直接抛出错误,更不可能得到求和结果。

闭包实现的核心逻辑

闭包的核心是让内层函数能访问外层函数的变量,这里的实现逻辑很直接:

  • 第一次调用lazyAdder(firstNum),保存firstNum并返回一个接收secondNum的函数;
  • 第二次调用返回的函数,保存secondNum并返回一个接收thirdNum的函数;
  • 第三次调用最后这个函数,直接计算并返回三个数的总和。

内容的提问来源于stack exchange,提问作者trying2code

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 19:20:20