(闭包)为什么输出这样的结果

    *  function m1(){
    *     
    *  var x = 1;
    *     
    *  return function(){
    *     
    *  console.log(++x);
    *     
    *  }
    *     
    *  }
    *     
    * 
    *  m1()(); //2
    *     
    *  m1()(); //2
    *     
    *  m1()(); //2
    *     
    * 
    *  var m2 = m1();
    *     
    *  m2(); //2
    *     
    *  m2(); //3
    *     
    *  m2(); //4
    * 
    (解释一下为什么上面的三个m1输出结果和后面三个m2的输出结果不一致为什么?)

阅读 1.5k
1 个回答

因为你调用m1()相当于初始化了执行了var x = 1,这样就初始化了x=1,然后m1()()就是初始化了x=1,再调用返回的函数体function(){console.log(++x)},所以m1()()执行多少次都是2,重复初始化了。后面那个就好理解了,因为m2 = m1(),初始化了x = 1,返回函数体,m2();m2();只是执行函数体,没有重新初始化x=1,所以等于23

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题