2017-10-28 87 views
1

我对JavaScript中的评估顺序感到困惑。在我的第一个示例中,我期望在函数console.log()之前评估参数number++,从而使控制台输出为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的理解,在执行包含函数之前,将首先从左到右评估参数。这似乎并非如此 - 有人可以解释为什么不能?

+1

'可变++'增加已经outputed后/使用时,'++可变'以前。两者都不是函数调用 – baao

+1

不要忘记声明所有变量,比如'number',否则它们会在全局范围内结束。或者查看[严格模式](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode),如果您尝试访问/分配未声明的变量,它会抛出。 – Thomas

回答

2

这里的问题在于++运算符。这表示采取数字的值,将其传递给函数,然后将数字加1。

如果将其更改为++数字,您将获得预期的行为。这就是说,将数字的值加1,然后将其传递给函数。

1

这是pre-incrementpost increment的基础知识。请记住我们有++numbernumber++++number立即增加号码(在该点),而number++在下一次遇到号码时增加号码。

+0

谢谢!如此简单,现在解释。我来自Ruby背景,刚开始学习JavaScript。 Ruby没有增量运算符,这可能是为什么我没有发现这一点。 – jonsanders101

+1

'number ++'* *返回旧值,'++ number' *返回*新值。他们两人在这一点上仍然增加数字**,并且在他们下次遇到时不会*(不知何故)。 – pinkfloydx33

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);

相关问题