不太明白,请老师指点

不太明白,请老师指点

<!DOCTYPE html>

<html lang="zh-CN">

  <head>

    <meta charset="UTF-8" />

    <title>什么可以做返回值</title>

  </head>

  <body>

    <script type="text/javascript">

      // 在此处补充代码

    function count(){

      var num=1

      return function(){

        return num++;

      }

    }

    console.log(count())

    // console.log(count()())

    // console.log(count()())

    // console.log(count()())

    // console.log(count()())

    var fn=count

    var fn2=count()

    console.log(fn)

    console.log(fn())

    console.log(fn2)

    console.log(fn2())

    console.log(fn2())

    console.log(fn2())

    console.log(fn2())

    console.log(fn2())

    // console.log(fn)

    // console.log(fn)

    // console.log(fn)


    </script>

  </body>

</html>


问题1:变量F2中是不是保存两个值,我可以不可以理解为类似对象这样,一个是FN2.NUM和fn2.function,两个,所以每次执行的时候  会对num改变?

类似以下情况:

    fn2={

      num:1,

      return:function () {

        return fn2.num++

      }

    }

问题2:count()()是函数,所以运行完一次以后垃圾回收,里面的num永远都是1,而FN2类似于一个对象,不会被垃圾回收?


正在回答

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

1回答

同学你好, 整体理解有一点偏差,主要是从函数的作用域方向去考虑哦, 可以参考下面的解释

  1. 当执行 fn2 = count() 这句代码的时候, 会在系统中创建一个关于count函数作用域, 这个作用域中保存的有变量num, 一个函数fn2

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

  2. 执行调用fn2的时候,生成一个fn2的函数作用域, 在这个函数内部使用了count作用域中的num值, 所以count函数作用域一直存在,不会被销毁, 站在fn2的角度看, 此时的count就是一个全局作用域, 每次调用fn的时候, 就会更新num的值,

    老师这里简单画个图帮助你理解,

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

综上, 可以看出, 是因为count函数作用域中num一直被引用,所以该作用域不会被销毁哦

如果帮助到了你, 欢迎采纳!

祝学习愉快~~~~

  • 慕前端2064318 提问者 #1
    也就是说在执行count的时候 是在全局作用域下执行的,没有在另外一个函数的作用域,所以每次执行count()()的时候,都会被充值, 而fn=count(),是在count的作用域下面了,并且由于count return了一个函数, fn执行的是count内return的函数,函数向上改变的的是count作用域中的num数值,所以会一直累加 而不会销毁函数,是这个意思吗?
    2019-10-18 16:29:59
  • 好帮手慕慕子 回复 提问者 慕前端2064318 #2
    同学你好, 是这样的, 理解的很对哦,祝学习愉快~~~
    2019-10-18 17:37:32
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星

相似问题

登录后可查看更多问答,登录/注册

组件化思想开发电商网页 18版
  • 参与学习           人
  • 提交作业       467    份
  • 解答问题       4826    个

本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。

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

在线咨询

领取优惠

免费试听

领取大纲

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