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

发布于 09-12 04:12 字数 461 浏览 25 评论 0

    *  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的输出结果不一致为什么?)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

秋风の叶未落2022-09-19 04:12:07

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文