2016-01-12 79 views
0

我正在使用此for循環來查找googlemaps標記數組中的特定標記。瞭解此JavaScript循環

google.maps.event.addListener(marker, 'dragend',() => { 
    for (var i = 0, I = this.markers.length; i < I && this.markers[i] != marker; ++i); 
    this.path.setAt(i, marker.getPosition()); 
}); 

我明白,當dragend事件被觸發執行循環,代碼工作,但我有一個很難解釋通俗易懂的語言如何循環工作。我從來沒有見過這樣寫的循環,我想更好地瞭解它是如何工作的。

感謝您的任何見解!

回答

2

其一,它使用匿名函數使用ES6箭頭:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions

其次,for循環分配2個變量iI,而不是僅僅1

var i = 0, I = this.markers.length; 

這也是使用2個條件語句。

i < I && this.markers[i] != marker; 

環路貫穿標記列表,直到找到最後一個,並創建沿着這些點的路徑。

這有幫助嗎?

+0

它幫助,我只是被!=標記弄糊塗了。這不會停止循環執行標記上的操作我有點擊,但操作確實會修改標記,這就是我的困惑 –

+0

@SethJohnson循環一直繼續下去,直到循環引用的當前標記與最終標記相等。 –

+0

對不起,我仍然感到困惑。我讀循環爲,對於不等於標記的數組長度中的每個元素執行操作。 –

0

我們初始化兩個變量,我和我。我是數組的長度,我開始爲零。

只要我小於數組的長度,並且只要第i個元素不是「標記」,我們就會循環。每次我們執行循環時,我們都會通過遞增i來繼續到數組的下一個元素。

+0

該操作應該修改「標記」正在發生的事情,以便我們不在「標記」上執行循環 –

0

語句1在循環(代碼塊)開始之前執行。 [第一個分號之前的陳述]。你的例子是聲明兩個變量。

聲明2定義了運行循環(代碼塊)的條件。 [第二個分號之前的陳述]。變量必須滿足這些條件才能執行循環。

語句3在每次執行循環(代碼塊)後執行。 [最後的聲明]。執行循環後執行一些操作。

在這裏看到:http://www.w3schools.com/js/js_loop_for.asp

1

循環是一樣的以下內容:

for (var i = 0; i < this.markers.length; ++i) 
    if (this.markers[i] == marker) 
     { break; } 

不明白這一點在這裏使用一個I ...看中了一個襯墊

+0

這對我來說很有意義,但代碼this.markers [i]!= marker。循環是否改變了!=意味着什麼?我正在對標記進行操作,所以我不確定爲什麼循環對所有東西都做了什麼,但標記。 –

+0

,因爲它是for循環的循環條件。 '如果A''和'如果不是A'相同則循環 – jack3694078