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

JavaScript函数序列示例疑问:请求解析控制台输出30的执行逻辑

关于JavaScript闭包函数输出30的逻辑验证

你的推测完全正确!这其实是JavaScript里**闭包(Closure)**的经典应用场景,我来帮你再把执行逻辑拆解得更清晰一点,方便你加深理解:

首先先还原一下你提到的示例代码(根据你的描述补全):

function makeMultiplier(multiplier) {
  // 返回一个匿名函数,这个函数会捕获外部作用域的multiplier变量
  return function(x) {
    return multiplier * x;
  };
}

// 调用makeMultiplier并传入3,得到一个绑定了multiplier=3的函数
var multiplyBy3 = makeMultiplier(3);
// 调用这个绑定后的函数,传入10
console.log(multiplyBy3(10)); // 输出30

详细执行步骤:

  • 当你调用makeMultiplier(3)时,函数的参数multiplier被赋值为3,此时函数内部返回了一个未执行的匿名函数。
  • 核心点:这个匿名函数保留了它定义时所在的词法环境——也就是makeMultiplier作用域里的multiplier=3这个值,哪怕makeMultiplier已经执行完毕退出,这个值依然被闭包“抓着”不会被垃圾回收。
  • 把这个匿名函数赋值给multiplyBy3后,multiplyBy3就变成了一个“自带乘数3”的函数,它的逻辑就是接收一个参数x,返回3 * x。
  • 最后调用multiplyBy3(10)时,传入的x是10,计算3*10得到30,所以控制台输出30。

补充个小知识点:如果再创建另一个乘数函数,比如var multiplyBy5 = makeMultiplier(5),它的multiplier会是5,和multiplyBy3完全独立,因为每个闭包都拥有自己的词法环境副本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:08:25