[英]How does a for-loop with four 'things' in the parenthesis work i Javascript?
我在這里遇到了一些代碼,例如https://stackoverflow.com/a/2922778/2176900 ,它是這樣開始的:
for (i = 0, j = nvert-1; i < nvert; j = i++) {...`
而且我不明白當括號中包含四項內容(“ i = 0”,“ j = nvert-1”,“ i <nvert”和“ j = i ++”)時該怎么辦。 我顯然一直在嘗試使用Google搜索,但是似乎找不到任何答案。 我敢肯定,如果我只知道括號中的內容是什么,我會很高興的。
謝謝
它沒有四件事。 它仍然有三個。
循環前語句
i = 0, j = nvert-1
迭代條件
i < nvert
迭代后的動作
j = i++
該循環前語句實際上可能應該讀取為:
var i = 0, j = nvert-1
請記住,我們可以在一個聲明中聲明多個變量。 這就是這里發生的事情。
為了增加來自@LightnessRacesinOrbit和@basilikum的出色答案,當發現這樣的不尋常for
循環時,這里有一條提示對我有用:將其分解為更原始的形式。
任何for
循環:
for( initialize; condition; advance ) {
// loop body here
}
可以翻譯成等效的while
循環:
initialize;
while( condition ) {
// loop body here
advance;
}
因此,您發現了循環:
for ( i = 0, j = nvert-1; i < nvert; j = i++ ) {
// loop body here
}
可以寫成:
i = 0, j = nvert - 1;
while( i < nvert ) {
// loop body here
j = i++;
}
現在,我們可以將其分解為更簡單的步驟。
正如@basilikum指出的,第一行:
i = 0, j = nvert - 1;
是相同的:
i = 0;
j = nvert - 1;
和循環的最后一行:
j = i++;
是相同的:
j = i;
i = i + 1;
因此,將它們放回代碼中,最終得到:
i = 0;
j = nvert - 1;
while( i < nvert ) {
// loop body here
j = i;
i = i + 1;
}
這比原始的for
循環更冗長,但是如果原始的循環令人困惑,則可能更容易考慮。
除了用戶在Orbit Races Orbit中已經解釋過的語法外,具有這種循環的原因很可能是在數組上循環並始終訪問兩個相鄰項。
var list = [1,2,3,4],
nvert = list.length;
for (i = 0, j = nvert-1; i < nvert; j = i++) {
//...
}
第一次迭代:
i = 0; //index of first item
j = nvert-1; //indext of last item
以下迭代:
j = i; //j becomes the old value of i
i = i + 1; //i gets incremented by one
因此,如果考慮數組[1,2,3,4]
則i
和j
將代表每次迭代的以下各項:
//first iteration
i => 1
j => 4
//second iteration
i => 2
j => 1
//third iteration
i => 3
j => 2
//fourth iteration
i => 4
j => 3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.