这题没搞懂

这题没搞懂

http://img1.sycdn.imooc.com//climg/5d365eff0001f7af07160926.jpg

老师能解析一下吗 从第一个打印开始

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕糖 2019-07-23 19:42:43

同学你好,是闭包,但是前三个是独立调用的,相当于每次都重新开辟一个作用域,来存放num,每次都是新的,所以每次都输出1。

而后面的是1,2,3。同学可以测试下哦。

祝学习愉快!

  • 提问者 JJJustin #1
    我懂了 因为是直接return 没有用变量保存 所以每次都为1 下面有用变量保存就会累加
    2019-07-23 20:36:59
好帮手慕糖 2019-07-23 15:30:30

同学你好,1、(1)count()调用得到这个函数的返回值,就是里面的返回的那个函数,然后后面在添加一个括号,就是调用了返回的这个函数。

(2)count()()这样调用,每次都会创建一个新的局部作用域,num的值会不断地被初始化为1;

(3)所以前三个都是每次调用一次,输出一个1。

2、(1)后面的三个,是先调用count(),且fn接收的就是返回的function;

(2)num是一个局部变量,调用之后就会被回收,但是fn是一个全局变量,不会自动回收,并且里面还用到了num变量,所以num也不会被回收。

(3)每调用一个fn,num值就会进行计算,所以输出的值为1,2,3 。

http://img1.sycdn.imooc.com//climg/5d36b7030001f5d705290524.jpg

希望能帮助到你,祝学习愉快!

  • 提问者 JJJustin #1
    这不是一个闭包吗 在第二个函数里面没找到num 应该会在上层找 找到num=1 然后返回num num一直在内存中,前面三个应该是打印1 2 3才对
    2019-07-23 15:36:30
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师