【问题标题】:Why is this value 3 in JavaScript? [duplicate]为什么这个值在 JavaScript 中是 3? [复制]
【发布时间】:2017-12-02 02:34:47
【问题描述】:

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

【问题讨论】:

  • 首先要更正您的代码格式,以便我们可以轻松理解。
  • 用所有结果值填充数组并查看所有结果值可能会有很大帮助,而不仅仅是最后一个。

标签: javascript post-increment


【解决方案1】:

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

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

    };
}

【讨论】:

  • 我建议也显示console.log(++n); 行为
  • @PatrickBarr 好点,补充。
  • 我明白了。谢谢~
  • @Jehyun 您可以将此答案标记为已接受吗?
【解决方案2】:

你把事情复杂化了:n++ 的计算结果是 n 的值,然后递增 n。

aTest 和bTest 拥有自己的n 私有副本,因此所有这些bTest.minusOP 调用都与p#demo 的最终内容无关,后者仅获取最后一个plusOP 返回的值。

n 从零开始。第一个return n++ 返回0 并将n 递增到1。下一个return 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>

【讨论】:

    猜你喜欢
    • 2019-06-18
    • 2016-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-02
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    相关资源
    最近更新 更多