关于#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才会消失
我的理解有问题,望各位指点!
也不知道我的这个问题题目有没有问对

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

这就是闭包问题