前端 - javascript关于闭包的面试题
PHPz
PHPz 2017-04-10 15:21:29
0
12
977
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}又起到了什么作用呢?

PHPz
PHPz

学习是最好的投资!

reply all(12)
伊谢尔伦

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

左手右手慢动作

还是闭包,好无聊。

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template