关于函数返回闭包的疑问: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
相关产品推荐
相关产品推荐

