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

闭包返回函数的参数如何传递至内部函数?示例代码相关疑问

关于闭包示例代码的疑问解答

先理清acc的本质

你混淆了acc和accumulator的关系:

  • 执行const acc = accumulator();时,accumulator函数已经执行完毕,它返回的是内部定义的箭头函数:(num) => { sum = sum + num; return sum; }
  • 所以acc其实是这个箭头函数的引用,调用acc(3)本质是直接调用该箭头函数,参数3自然对应箭头函数的num参数——这和accumulator(3)完全不是一回事,accumulator本身不需要接收参数。

这确实涉及闭包概念

这个例子是闭包的典型应用:

  • 当accumulator执行结束后,它的执行上下文本应被销毁,内部的sum变量也会被垃圾回收机制回收。但因为返回的箭头函数仍然持有对sum的引用,sum变量被保留了下来,形成了闭包。
  • 每次调用acc(num)时,箭头函数都会访问并修改这个被闭包保留的sum变量,这就是两次调用能得到累加结果3和8的核心原因。

代码执行流程拆解

我们一步步梳理:

  1. 执行accumulator():初始化sum = 0,返回箭头函数,此时sum被箭头函数引用,不会被销毁。
  2. 执行acc(3):调用箭头函数,num接收3,执行sum = 0 + 3,返回3。
  3. 执行acc(5):再次调用箭头函数,num接收5,执行sum = 3 + 5,返回8。
function accumulator(){
    let sum =0;
    return (num) =>{
        sum = sum + num;
        return sum;
    }
}

const acc = accumulator();

console.log(acc(3)); // 输出3
console.log(acc(5)); // 输出8

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 18:22:09