问答详情
源自:7-1 [JavaScript]理解闭包

试问 如果 nAdd=n 是不是就可以利用全局变量提出局部变量n了啊?

function f1(){

    var n=999;

    nAdd=function(){n+=1}

    function f2(){
      alert(n);
    }

    return f2;

  }

  var result=f1();

  result(); // 999

  nAdd();

  result(); // 1000

如果不行的话?为何nAdd=function(){n+=1}可以调用里面的n呢?难道是因为nAdd是由一个函数调用的 那么如果nAdd在f1的外面也可以调用吗?WHY??求大神

提问者:Samuel_Yang 2017-03-08 17:04

个回答

  • 慕粉丹哥
    2017-03-12 16:50:33
    已采纳

    不行,我还是厚着脸皮再来一次。

    首先,nAdd是全局变量,用nAdd = n的方式是可以吧局部变量暴露出去的,如果nAdd是简单的基本类型,n的每一次变化都需要通过nAdd = n的方式赋值。

    第二个,关于n的作用域问题,这里nAdd的作用,形成闭包,局部变量n并不会在执行完result()后销毁而是继续保存在内存中。