2017-10-28 83 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);

相關問題