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

来源:7-1 [JavaScript]理解闭包

Samuel_Yang

2017-03-08 17:04

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??求大神

写回答 关注

1回答

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

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

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

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

    Samuel...

    非常感谢!

    2017-03-13 09:17:51

    共 1 条回复 >

JavaScript深入浅出

由浅入深学习JS语言特性,且解析JS常见误区,从入门到掌握

281111 学习 · 1020 问题

查看课程

相似问题