2016-01-12 50 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