我对JavaScript中的评估顺序感到困惑。在我的第一个例子中,我希望在函数number++
之前评估参数console.log()
,使控制台输出2,3,4
。
将1, 2, 3
打印到控制台:
var foo = [1,2,3]
for (number of foo) {
console.log(number++)
}

将2, 3, 4
打印到控制台:
var foo = [1,2,3]
for (number of foo) {
number++
console.log(number)
}

根据我对this answer的理解,在执行包含函数之前,将首先从左到右评估参数。这似乎不是这样 - 有人可以解释为什么不呢?
答案 0 :(得分:2)
这里的问题是++运算符。这表示取数字的值,将其传递给函数,然后在数字中加一。
如果将其更改为++编号,您将获得预期的行为。这表示在数字值中加一,然后将其传递给函数。
答案 1 :(得分:1)
这是pre-increment
和post increment
的基础知识。请记住,我们有++number
和number++
。 ++number
会立即(在此时)增加数量,而number++
会在下次数字时增加数量。
答案 2 :(得分:0)
console.log(number++)
运行console.log(number)
因为它无法运行++,因为参数正确为console.log(++number)
var foo = [1,2,3];
for (number of foo) console.log(number++);
console.log("---");
for (number of foo) console.log(number);
console.log("---");
// This is the same as your second block of code
for (number of foo) console.log(++number);
console.log("---");
// You can see that does not change the foo values
for (number of foo) console.log(number);