7-4选择题这么理解对不对?

7-4选择题这么理解对不对?

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

1
2
3
4
5
6
function count() { //函数1
    var num = 1;
    return function() {//函数2
        return num++;
    };
}

count()() 相当于先执行一次函数1,然后又自调用了一下函数2.

由于num++是后自增,所以函数2返回的是1;

count()() count()() count()() 每次都先执行了函数1,每次都 var num=1;所以是函数2返回值一直是1,1,1

var fn = count();时,执行了一次函数1,var num=1,但fn实际指向的堆地址是被return的函数2.

fn() fn() fn() 这时每次调用fn时,由于fn指向的函数2体内并不存在 var num=1的声明;所以是1,2,3

正在回答

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

5回答

理解ok,说明理解了相应知识点,棒棒哒,加油。

  • 留白未来 提问者 #1
    有个问题,fn()在执行的时候,是怎么找到num的?
    2017-12-07 13:22:24
  • 潜狸 #2
    return还有调用函数的作用?
    2017-12-11 16:23:23
怎么都被占用了呢 2017-12-11 17:45:10

return的作用有2种,中断代码的向下运行和返回值操作。没有调用函数的作用。

好帮手慕糖 2017-12-07 15:38:21

你好,var num=1;是count()函数中的局部变量,但是在这个函数中,他相对于函数中的匿名函数即:function(){return num++}; 来说可以是全局哦,因为这个变量不在这个匿名函数中,但是都在count()函数这个作用域下,这里有点绕,这就跟我们写一个函数,即如下图:这种情况类似的哦。

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

祝学习愉快~

  • 提问者 留白未来 #1
    明白了,十分感谢!
    2017-12-07 15:41:33
提问者 留白未来 2017-12-07 15:12:58

谢谢老师回复,还有点不理解. 

这个fn的上一级不是全局吗? 

var fn=count(); 先执行count(); 

然后给fn赋值为function(){return num++}; 

它和count不是同一级的吗? 

我理解是这样: 

function count(){var num=1;} 

count() 

var fn=function(){return num++}; 

所以不明白fn怎么拿到count里的局部变量num的.

好帮手慕糖 2017-12-07 15:05:25

你好,因为它的内部没有使用var声明的num,它就会往上找哦。

祝学习愉快~

  • 提问者 留白未来 #1
    谢谢老师回复,还有点不理解. 这个fn的上一级不是全局吗? var fn=count(); 先执行count(); 然后给fn赋值为function(){return num++}; 它和count不是同一级的吗? 我理解是这样: function count(){var num=1;} count() var fn=function(){return num++}; 所以不明白fn怎么拿到count里的局部变量num的.
    2017-12-07 15:12:10
  • 提问者 留白未来 #2
    老师看我上面的回复吧,这里没有换行,看着乱.
    2017-12-07 15:13:49
  • Kivdy 回复 提问者 留白未来 #3
    作用域的问题,可以理解为num始终都在这个堆中,是fn的私有变量。
    2017-12-07 21:11:21
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
HTML5与CSS3实现动态网页 2018
  • 参与学习       1887    人
  • 提交作业       4643    份
  • 解答问题       5760    个

有HTML和CSS基础,却不知道如何进阶?本路径带你通过系统学习,完成从“会做网页”到“做出好的动态网页”的蜕变,迈出成为前端工程师的第一步。

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

在线咨询

领取优惠

免费试听

领取大纲

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