Taylor_224 2021-09-11 18:25 采纳率: 66.7%
浏览 27
已结题

关于#javascript#的问题:也不知道我的这个问题题目有没有问对

 <script>
        function f1() {
            var n = 999;
            nAdd = function () { n += 1 }
            function f2() {
                alert(n);
            }
            return f2;
        }
        var result = f1();
        result(); // 999
        nAdd();
        result(); // 1000
    </script>

第一次调用result() 不是应该代码从上往下调用,第一次nAdd 时 n = 999+1=1000,第二次f2 时n怎么又变会回了999
第二个nAdd()我认为是脱离了函数被回收了,所以不会执行
第三个result()我只知道n会一直保存在内存汇总(这就是内存泄露?),除非销毁这个闭包,n才会消失
我的理解有问题,望各位指点!
也不知道我的这个问题题目有没有问对

  • 写回答

2条回答 默认 最新

  • 急速光粒 2021-09-11 19:25
    关注

    第一次调用result() 不是应该代码从上往下调用,第一次nAdd 时 n = 999+1=1000,第二次f2 时n怎么又变会回了999
    这个理解有问题,第一次并没有调用nAdd,只是定义了一个nAddn数。n还是999
    第二个nAdd()我认为是脱离了函数被回收了,所以不会执行
    也不对,刚好是调用了nAdd,这下n变成了1000
    第三个result()我只知道n会一直保存在内存汇总(这就是内存泄露?),除非销毁这个闭包,n才会消失
    这次调用输出n,alert(n)=1000.

    本回答被专家选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月23日
  • 专家已采纳回答 9月15日
  • 创建了问题 9月11日

悬赏问题

  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 问一下,定向解包是什么意思
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!