为什么fn()会输出123?

为什么fn()会输出123?

我的思路是这样的: var fn = count();  就是fn也指向了count() 调用fn()就是调用count()  然后var num = 1; 接着就return了 返回值的应该是function(){return num++;}啊  这个匿名函数并没有被调用啊  请老师矫正这个思路

正在回答

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

2回答

同学你好!
1.可以这么理解: fn接收的是返回的function

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

2.虽然num是一个局部变量,但是fn是全局变量,不会自动销毁,而fn方法中用到了count中的num变量,因为返回的function是count中的,可以沿着作用域找到num变量使用。正常num是局部变量,count方法调用之后就会被销毁,然后fn全局变量用到了num,所以就不会被销毁了,每次调用fn(),num值就会在原来的基础上增加。

如果帮助到了你,欢迎采纳,祝学习愉快~

好帮手慕码 2019-09-27 17:34:02

同学你好!
同学理解的是有一些问题的。后面调用count赋值给全局变量fn:

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

那么fn接收的就是返回的function。num是一个局部变量,调用之后就会被回收,但是fn是一个全局变量,不会自动回收,并且里面还用到了num变量,所以num没有被回收。每调用一个fn,num值就会进行计算,所以输出的值为1,2,3 。

如果帮助到了你,欢迎采纳,祝学习愉快~

  • 提问者 上心4409406 #1
    哦 就是var fn = count(); 这里的count();已经被调用了一次 fn被赋予的是function(){return num++;} 可以这么理解吗。 调用fn还是没懂 调用fn 就是执行 returen num++; 这里num并没有var啊... num = 1 是count里的局部变量 fn应该获取不到呀 。。。。。
    2019-09-27 18:05:53
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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