为什么我的JavaScript递增运算符(++)在我的addOne函数中无法正常工作?

10

请问有人可以解释一下为什么我的addOne函数不能使用递增运算符(++)吗?以下是我的代码。

// addOne Function

function addOne(num){
  return num + 1
}

log(addOne(6)) => 7


// same function with ++ operator

function addOne(num){
  return num++
}

log(addOne(6)) => 6


// Question - why am I getting 6 instead of 7 when I use ++ operator?

5
"后置递增"运算符正是它应该做的:它返回原始值并递增变量。 - deceze
首先它返回,然后增加。在您的情况下使用前缀表示法。 - Maxx
你的解释非常清晰易懂,非常感谢。 - user6287843
3个回答

17

有两个自增运算符:前缀和后缀。

后缀运算符在变量被评估后递增。例如,以下代码产生11,因为它添加了5和6:

var a = 5;
(a++) + (a++)

前缀运算符在变量被评估之前对其进行递增。听起来这正是您想要的。以下代码会产生13,因为它将6和7相加:

var a = 5;
(++a) + (++a)

所以你的代码应该是:

function addOne(num) {
  return ++num;
}

console.log(addOne(6));

非常感谢您的解释。您真的讲得很清楚易懂。 - user6287843

2

这不是 ++ 的正确使用方式,而且很多人都不建议使用 ++。++ 会改变变量的值并返回它之前的值。请尝试以下示例:

var two = 2;
var three = two += 1;
alert(two + ' ' + three);

two = 2;
three = two++;
alert(two + ' ' +  three);

two = 2;
three = two + 1;
alert(two + ' ' +  three);

1

num+1会在当前表达式被评估之前增加数字,因此log会记录增加后的数字,但num++会在表达式被评估之后增加数字,所以log将记录增加前的num然后再增加它。

如果您想执行与num+1相同的功能,则可以使用++num,它将执行相同的操作。

它们都会增加数字。++i等同于i = i + 1。

i++和++i非常相似,但并不完全相同。两者都会增加数字,但++i会在当前表达式被评估之前增加数字,而i++会在表达式被评估之后增加数字。 请参见此问题


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接