recherche

Maison  >  Questions et réponses  >  le corps du texte

前端 - javascript关于闭包的面试题

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

在这段代码中,result()它一共运行了两次,第一次的值是999,第二次的值是1000。这证明了,函数f1中的局部变量n一直保存在内存中,并没有在f1调用后被自动清除。为什么会这样呢?尤其是第二次,为何输出的不是999呢?
nAdd=function(){n+=1}又起到了什么作用呢?

PHPzPHPz2895 Il y a quelques jours968

répondre à tous(12)je répondrai

  • 伊谢尔伦

    伊谢尔伦2017-04-10 15:23:29

    nAdd 他相当于一个全局变量,因为在f1内,只要f1执行后,nAdd才能依附于window上,f1()执行后,nAdd只要执行n就会加1,执行第二次是,因为已经加一,所以result会返回1000, 这个主要考察,闭包和作用域

    répondre
    0
  • ringa_lee

    ringa_lee2017-04-10 15:23:29

    还是闭包,好无聊。

    répondre
    0
  • Annulerrépondre