2014-02-28 54 views
2

在該array.prototype.reduce功能:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce在這個循環中,++ i和i ++有區別嗎?

它具有以下循環:

for (index = 0; length > index; ++index) { 
    if (this.hasOwnProperty(index)) { 
     if (isValueSet) { 
     value = callback(value, this[index], index, this); 
     } else { 
     value = this[index]; 
     isValueSet = true; 
     } 
    } 
} 

我不認爲是有區別的索引是否是前或之後,它的完成後遞增這裏循環每次迭代後,但要確定。

這可以更改爲索引+ = 1,所以它通過jslint?請不要辯論jslint警告的優點。

這個改變會有什麼區別嗎?

+1

JSLint保存的另一段代碼...呃。 –

+0

好吧,'/ * jslint plusplus:true * /',你可以不保存。 ; ^) – ruffin

回答

10

i++,++ii += 1之間的唯一區別是從表達式返回的值。考慮以下幾點:

// Case 1: 
var i = 0, r = i++; 
console.log(i, r); // 1, 0 

// Case 2: 
var i = 0, r = ++i; 
console.log(i, r); // 1, 1 

// Case 3: 
var i = 0, r = (i += 1); 
console.log(i, r); // 1, 1 

在這些情況下,仍然i增量後相同,但r是不同的,i += 1擺明的++i一個稍微詳細的形式。

在你的代碼中,你根本沒有使用返回值,所以不,沒有區別。就個人而言,我更喜歡使用i++,除非有特別需要使用其他形式之一。

+3

此外,還有一些背景信息,爲什麼有人使用'++ index'來遞增變量:作爲編譯器,* compiled *語言中的'index ++'和'++ index'之間可能存在性能差異可以將後者轉換爲更少的機器指令。然而,在Javascript中,這沒有什麼不同(現代編譯器應該能夠檢測出你是否不訪問變量並優化它)。 –

+2

謝謝,你好!你之前很清楚地回答了我的另一個問題。非常感謝你的幫助。隨着我越來越熟練,我希望能儘快幫助別人,就像你幫助過我一樣。 – esnm

+0

@ChrisG。我很高興我可以幫助:) –

相關問題