首页 > 解决方案 > 高阶函数中count++和count+1的区别

问题描述

示例 1

function makeCounter() {
      let count = 0;

      return function() {
        return count++;
      };
    }

    let counter = makeCounter();

    alert( counter() ); 
    alert( counter() );

上面分别是警报 0 和 1。


示例 2

function makeCounter() {
  let count = 0;

  return function() {
    return count+1;
  };
}

let counter = makeCounter();

alert( counter() ); 
alert( counter() ); 

这分别提醒 1 和 1

在编程中 count++ 等价于 count+1 ,那么为什么上面两个例子有区别。我知道它与关闭属性和提升有关。但是完全理解。你们能帮忙吗。

注意:如果没有意义,请告诉我是否应该更改问题的标题。

标签: javascriptvariablesscope

解决方案


表达式count++计算count,加 1,将结果存储在 中count,但总体结果( 的净值count++)是 的原始count

表达式count + 1求值count,加 1,然后返回结果。的值count没有改变。

有趣的是,虽然可以++count用另一种表达方式来模拟(预增量)

var inc = (count += 1);

真的没有办法(我能想到)在count++不使用函数的情况下干净地模仿,因为没有绕过对临时存储位置的需求:

var inc = () => { let tmp = count; count += 1; return tmp }();

后增量的运算符语义++可以追溯到 1970 年代甚至更早的 C,并且已被包括 JavaScript 在内的许多其他语言复制。民间传说(我记得,作为一个老人)认为,前增量和后增量运算符的灵感来自于 DEC PDP-11 指令集中可用的寻址模式,但这对我来说似乎总是不太可能。


推荐阅读