为了账号安全,请及时绑定邮箱和手机立即绑定

试问 如果 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??求大神

正在回答

2 回答

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

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

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

0 回复 有任何疑惑可以回复我~
#1

Samuel_Yang 提问者

非常感谢!
2017-03-13 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信