代码之家  ›  专栏  ›  技术社区  ›  Amar Singh Bharat Patel

高阶函数中count++和count+1的差异

  •  2
  • Amar Singh Bharat Patel  · 技术社区  · 8 年前

    例1

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


    例2

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

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

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

    2 回复  |  直到 8 年前
        1
  •  6
  •   Pointy    8 年前

    表达式 count++ 评估 count ,添加1,将结果存储在 计数 ,但总的结果是 )是 起初的 的价值

    表达式 count + 1 评估 计数 计数

    有趣的是,虽然可以模仿 ++count

    var inc = (count += 1);
    

    真的没有办法(我能想到)去模仿 计数++ 干净而不使用功能,因为不需要临时存储位置:

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

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

        2
  •  3
  •   Ajaypayne    8 年前

    在第一个示例中,您是后递增的,即在声明和使用之后添加1。如果使用++计数(预递增),则警报中会出现1和2。

    在第二个示例中,您没有将count+1的值存储回count,因此在第二次时,count仍然是0,您将再次得到相同的结果。