0
function setupCounter(val){
  console.log(val);
    return function counter(){
      console.log('counter func ', val);
        return val++;
      }
    }
debugger
let counter1 = setupCounter(0);
console.log(counter1()); //0
console.log(counter1()); //1

为什么第一个counter1()不增加值并返回 0。但是第二个调用将值增加到 1,正如预期的那样:这是我一直在调试的

4

1 回答 1

3

这里的问题是后缀增量运算符不会返回您期望的结果。引用自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Increment

如果使用后缀,操作数后有运算符(例如,x++),则自增运算符会自增并返回自增前的值。

如果使用前缀,在操作数之前加上运算符(例如,++x),则自增运算符自增并返回自增后的值。

Usingval++实际上会返回以前的值,而不是它变成的值。如果您希望它返回值,您可以使用增量运算符作为前缀,例如:++val

由于这种常见的混淆,我更喜欢更冗长并做这样的事情:

val += 1;
return val;
于 2021-07-01T16:11:33.573 回答