JavaScript中赋值函数返回值给变量再调用的变化及闭包示例疑问
闭包示例代码的执行过程解析
咱们一步一步拆解最后两行代码的执行逻辑:
第一步:const newFunction = outerFunction('outside')
- 调用
outerFunction('outside')时,函数内部的outerVariable会被赋值为'outside'。 outerFunction的返回值是它内部定义的innerFunction函数——这里只是把innerFunction这个函数本身返回出来,并没有执行它。- 核心点:闭包的关键就在这——
innerFunction被返回后,并没有丢失对outerFunction作用域里outerVariable的访问权,哪怕outerFunction已经执行完退出了,这个变量依然会被保留下来供innerFunction使用。
第二步:newFunction('inside')
- 因为
newFunction就是刚才outerFunction返回的innerFunction,所以调用newFunction('inside')其实就是在调用innerFunction('inside')。 - 此时
innerFunction的参数innerVariable被赋值为'inside',然后执行内部的两个console.log:- 第一个
log用到的outerVariable就是之前保留的'outside'; - 第二个
log用到的是当前传入的'inside'。
- 第一个
最终控制台会输出:
outer variable: outside inner variable: inside
内容的提问来源于stack exchange,提问作者Housni
相关产品推荐
相关产品推荐

