闭包&作用域

70 阅读1分钟
    function test() {
      var n = 4399;
      function add(){
        n++;
        console.log(n);
      }
      return {n:n,add:add}
    }

    var result = test();
    var result2 = test();
    result.add(); 
    result.add();
    console.log(result.n);
    result2.add();

输出:4400 4401 4399 4400

  1. test内部有一个局部变量n,1个闭包,闭包的作用域是定义它的父级,定义的时候作用域就已经确定了,resultresult2都是不同的作用域,返回一个新的对象。
  2. result.add(); 访问的是闭包的父级的n的作用域
  3. result.n;访问的是返回的新对象的创建的n