Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
577 views
in Technique[技术] by (71.8m points)

js闭包问题?这段代码如何理解呢?为什么第二次调用result()变成1000了?

javascript闭包相关问题?为什么第二次调用result()变成1000了?
第二次调用result的时候还是会走var n=999;那输出的值为什么不是999?

function f1(){

    var n=999;

    nAdd=function(){n+=1}

    function f2(){  
      alert(n);  
    }

    return f2;

  }

  var result=f1();

  result(); // 999

  nAdd();
  
   result(); // 1000

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

image.png
在这个位置看下result变成了什么。

result=f1();//这里已经给result重新赋值,值为f1()返回的结果,就是函数f2;
           // 所有这时候result = function(){alert(n)};
            
 //后面再怎么执行result,也不会重新var n;

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...