erase: function(item){
for (var i = this.length; i--;) {
if (this[i] === item) this.splice(i, 1);
}
return this;
}
这个(var i = this.length; i--;)
句法结构如何工作?
是否应该有三个部分?在这种情况下它是什么?
来自here。
答案 0 :(得分:5)
C语言中的for
循环由三部分组成:
for
(初始化;
条件;
更新){ ... }
< / p>
然后循环转换为以下(大致)等效循环(存在差异,但这里不相关):
初始化
;
while
(条件){
...
更新;
}
所以初始化程序部分首先运行;然后只要条件保持为真,循环就会运行,并且在每次迭代结束时 update 部分运行。它不一定是增量,但最常见的形式如下:
for (var i = 0; i < something; i++) { ... }
但是你可以将任何你想要的东西写入这些部分,如果你在循环中做的任何事情都足以让循环正确运行并终止,你也可以将它们留空。因此,在您的情况下,由于i--
是一个也更新i
的表达式,因此循环只将条件和更新合并为一个并倒计时
答案 1 :(得分:3)
它将i
初始化为this.length
,并使用条件检查来减少它。当它变为零时,这是一个假值,循环停止。
但请注意,因为您在支票中递减,所以循环从this.length - 1
开始,到0
结束。所以它相当于:
(var i = this.length - 1; i >= 0; i--)
但请不要使用这种语法,因为它的行为令人困惑 - 正如您可能已经注意到的那样。
答案 2 :(得分:2)
在某些时候,i
将达到0
,这是一个假值,这就结束了循环。
更具体地说,经过几次迭代:
i
并获取1
i
将会减少并成为0
i == 0
i
并获取0
i
将会减少并成为-1