2011-03-13 13 views
5

我只是碰到这种代码来到Mozilla的网站,而对我来说,它看起来坏了,很可能我不熟悉它的使用方法:分号在“for”开头如何工作?

for (; k < len; k++) 
    { 
     if (k in t && t[k] === searchElement) 
     return k; 
    } 

如何在循环的开始分号工作?

完整的代码here.

回答

12

第一部分是用来初始化变量初始表达(见for construct):

for ([initial-expression]; [condition]; [final-expression]) 
    statement 

托架在这种情况下,它是可选的意思。所以如果你没有任何初始化变量,你不需要写任何初始化表达式。如在此情况下kfor循环之前进行初始化:

var k = n >= 0 
     ? n 
     : Math.max(len - Math.abs(n), 0); 

for (; k < len; k++) 
{ 
    if (k in t && t[k] === searchElement) 
    return k; 
} 

你也可以写为:初始表达一部分,但是这不会是可读:

for (var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); k < len; k++) 
{ 
    if (k in t && t[k] === searchElement) 
    return k; 
} 
+1

谢谢,我没有意识到的变量是可选的很有道理,现在看到它这个样子。 – Stephen 2011-03-13 13:29:58

1

它的平均声明和初始化k变量是较高的;

如果你想跳过一些部分,你只要把分号,例如:

for (;;) { 
    //infinite loop 
} 
+0

无限,不是不可知的 – 2011-03-13 14:26:16

+0

是真的 - 太多的英文文法:) – smas 2011-03-13 17:48:19

+0

@tomalak是的,教我我的主人 – smas 2011-03-14 09:37:26