为什么这个值在 JavaScript 中是 3?

Why is this value 3 in JavaScript?

我认为下面的代码应该显示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>

你把事情搞得太复杂了:n++ 计算出 n 的值,然后递增 n

aTestbTest 拥有自己的 n 私有副本,因此所有这些 bTest.minusOP 调用与 p#demo 的最终内容无关只获取最后一个plusOP.

返回的值

n 开始时为零。第一个 return n++ returns 0 并递增 n1。下一个 return n++ returns 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>

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

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;
        }

    };
}