首页 > 求助关于闭包和提升

求助关于闭包和提升

function f1(){
    var n=999;
    nAdd=function(){
     n+=1
    };
    function f2(){
      alert(n);
    }
    return f2;
  }
  var result1=f1();

var result2=f1();

  result1(); // 999

result2();//999

  nAdd();
 result1(); // 是999而不是1000,这是为何呢?

result2();//1000
哪位大神可以解释下?还有如果以nAdd=function(){

     n+=1
    };这种形式在函数内定义了一个全局变量,这个全局变量也可以访问n吗?不是全局变量不能访问函数内的变量吗?还有我记得有书上面说的是函数的作用域不是是取决于函数定义的时候而不是调用的时候的作用域吗?这个全局变量nAdd不就是相当于定义的时候是全局吗?所以不应该不能访问n吗?这一块一直都不太懂,希望哪位大神可以教教我!谢谢


函数中变量的作用域是在定义的决定,而不是在在执行的时候。
也就是

nAdd=function(){
 n+=1
};

这个赋值语句执行完毕后,变量n就是函数f1中的变量n,虽然nAdd是一个全局变量

var n=0;
function f1(){
    var n=999;
    nAdd=function(){
     n+=1;
     return n;
    };
    function f2(){
      alert(n);
    }
    return f2;
  }
f1();
nAdd();//返回值还是,而不是0

【热门文章】
【热门文章】