2011-03-13 14 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