【问题标题】:Different output of Closure JavaScript (simple) counterClosure JavaScript(简单)计数器的不同输出
【发布时间】:2019-02-09 14:36:02
【问题描述】:

谁能解释一下这个闭包 JS 计数器的不同输出。

第一个 sn-p 输出从 0 开始的地方:

var counter = (function() {
    var count = 0;
    return function() {
        return count++;
    }
}());
console.log(counter()); // output: 0
console.log(counter()); // output: 1
console.log(counter()); // output: 2

第二个 sn-p 输出从 1 开始的地方:

var add = (function() {
    var counter = 0;
    return function() {
        counter++;
        return counter;
    }
})();

console.log(add()); // output: 1;
console.log(add()); // output: 2;
console.log(add()); // output: 3;

为什么会这样?为什么第一个输出从 0 开始,第二个输出从 1 开始?谢谢。

【问题讨论】:

    标签: javascript closures output counter difference


    【解决方案1】:

    counter++; 在后缀位置有 ++ 运算符,它告诉它先返回 counter 的值,然后再递增。所以在你的第一个例子中,这就是发生的事情:返回 0,然后递增到 1;然后返回 1,然后递增到 2,依此类推。

    在您的第二个示例中,counter++ 仍然首先返回并在之后递增,但没有人关心递增操作的返回值,因为该代码行没有左侧。然后后面的一行将返回现在增加的值。

    也可以在前缀位置使用++,在这种情况下它会先递增然后返回。您可以使用它来修改您的第一个示例以输出 1、2、3。

    const counter = (function() {
        let count = 0;
        return function() {
            return ++count; //<--- changed to prefix
        }
    }());
    console.log(counter()); // output: 1
    console.log(counter()); // output: 2
    console.log(counter()); // output: 3

    【讨论】:

      【解决方案2】:

      第一个片段

      return count++;
      

      相当于:

      temp = count;
      count = count + 1;
      return temp;
      

      所以它从 0 开始

      第二段

      count++;
      return count;
      

      相当于:

      temp = count;
      count = count + 1;
      return count;
      

      所以它的初始值为1;

      预增量

      const counter = (function() {
        let count = 0;
        return function() {
          return ++count;
        }
      }());
      

      这导致首先增加 count 的值,然后返回它的值 等同于:

      const counter = (function() {
        let count = 0;
        return function() {
          count = count + 1;
          return count;
        }
      }());
      

      发布增量

      const counter = (function() {
        let count = 0;
        return function() {
          return count++;
        }
      }());
      

      这导致首先增加 count 的值,然后返回它的值 等同于:

      const counter = (function() {
        let count = 0;
        return function() {
          temp = count;
          count = count + 1;
          return temp;
      }
      }());
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-15
        • 1970-01-01
        • 1970-01-01
        • 2019-12-21
        • 1970-01-01
        相关资源
        最近更新 更多