代码之家  ›  专栏  ›  技术社区  ›  Jehyun

为什么JavaScript中的值是3?[副本]

  •  1
  • Jehyun  · 技术社区  · 7 年前

    我认为下面的代码应该显示4,为什么它会生成3?

    function arithFunc() {
        var n = 0;
        return {
            plusOP: function() {
                return n++;
            },
            minusOP: function() {
                return n--;
            }
    
        };
    }
    
    var aTest = arithFunc(),
        bTest = arithFunc();
    
    document.getElementById("demo").innerHTML = aTest.plusOP();
    document.getElementById("demo").innerHTML = aTest.plusOP();
    document.getElementById("demo").innerHTML = bTest.minusOP();
    document.getElementById("demo").innerHTML = aTest.plusOP();
    document.getElementById("demo").innerHTML = bTest.minusOP();
    document.getElementById("demo").innerHTML = aTest.plusOP();
    <p id="demo"></p>
    2 回复  |  直到 7 年前
        1
  •  5
  •   sbking    7 年前

    您正在使用后缀递增和递减运算符。这些是在返回值后计算的。例如:

    var n = 0;
    console.log(n++); // 0
    console.log(n); // 1
    

    尝试改用前缀运算符:

    var n = 0;
    console.log(++n); // 1
    console.log(n); // 1
    

    function arithFunc() {
        var n = 0;
        return {
            plusOP: function() {
                return ++n;
            },
            minusOP: function() {
                return --n;
            }
    
        };
    }
    
        2
  •  3
  •   brian d foy    7 年前

    你把事情复杂化了: n++ 计算值为 n n .

    aTest bTest n ,所以所有这些 bTest.minusOP 调用与 p#demo 它只获取最后一个 plusOP .

    从零开始。第一个 return n++ 0 和增量 n 1 .下一个 2 等等等等

    function arithFunc() {
      var n = 0;
      return {
        plusOP: function() {
          return n++;
        },
        minusOP: function() {
          return n--;
        }
    
      };
    }
    
    var aTest = arithFunc(),
      bTest = arithFunc();
    
    document.getElementById("demo").innerHTML += " " + aTest.plusOP();
    document.getElementById("demo").innerHTML += " " + aTest.plusOP();
    document.getElementById("demo").innerHTML += " " + bTest.minusOP();
    document.getElementById("demo").innerHTML += " " + aTest.plusOP();
    document.getElementById("demo").innerHTML += " " + bTest.minusOP();
    document.getElementById("demo").innerHTML += " " + aTest.plusOP();
    <p id="demo"></p>