这个语法是如何工作的?

时间:2011-10-08 20:01:42

标签: javascript syntax

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

3 个答案:

答案 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
  • 循环结束