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

关于函数返回闭包的疑问:return second去向及fn调用方式

闭包代码疑问解答

1. 第8行return second的返回目标

  • 这里的return second是把内部函数second作为返回值,返回给调用first()的地方——也就是const fn = first()这一行,最终fn变量存储的就是second函数本身。
  • 它不是返回给first函数自己,而是first执行完毕后,把这个内部函数暴露给外部作用域,让外部能调用它。

2. 为什么需要fn()调用而非直接用fn

  • first()执行后返回的是函数对象(也就是second函数的引用),变量fn保存的是这个函数本身,不是函数执行后的结果。
  • 直接写fn只是引用这个函数对象,不会触发内部的a++、console.log等逻辑;只有加上括号fn(),才是真正调用这个函数,执行它内部的代码。

补充对比

如果first返回的是函数执行结果(比如return second()),那fn会是undefined(因为second没有返回值),这时候就不需要加括号,但你的代码里返回的是函数本身,所以必须通过括号调用才会生效。

原代码:

function first() {
  let a = 0
  let b = 10

  function second() {
    a++
    b++
    console.log(a, b)
  }
  
  return second
}

const fn = first()

fn()
fn()

内容的提问来源于stack exchange,提问作者Souŕav Çhakraborty

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 03:52:13