这题没搞懂

来源:7-8 选择练习

JJJustin

2019-07-23 10:23:50

http://img.mukewang.com/climg/5d365eff0001f7af07160926.jpg

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

写回答

2回答

好帮手慕糖

2019-07-23

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

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

祝学习愉快!

0
hJJustin
h 我懂了 因为是直接return 没有用变量保存 所以每次都为1 下面有用变量保存就会累加
h019-07-23
共1条回复

好帮手慕糖

2019-07-23

同学你好,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://img.mukewang.com/climg/5d36b7030001f5d705290524.jpg

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

0
hJJustin
h 这不是一个闭包吗 在第二个函数里面没找到num 应该会在上层找 找到num=1 然后返回num num一直在内存中,前面三个应该是打印1 2 3才对
h019-07-23
共1条回复

0 学习 · 14456 问题

查看课程