2012-05-25 194 views
0

我使用的是有點不合常規的循環警報出現後,對於我在做什麼,如下轉述(沒有打擾顯示變量聲明)運行良好:Closure編譯器for循環

if (arr && arr.length > 0) { 
    for (i = arr.length; i--; i) { 
     element = arr.pop(); 
     //rest of code 
    } 
} 

Closure編譯器是給我警告:「警告 - 可疑代碼。這段代碼沒有副作用,是否有錯誤?」專門指向For循環中的最後一個「我」。

如果我刪除i,jslint會拋出警告,如果我離開它,閉包會拋出警告。總共有三個這樣的循環,是否有「關閉友好」的方式來做到這一點?

回答

3

如何'回合正常的方式?

if (arr && arr.length > 0) { 
    for (i = arr.length; i > 0; --i) { 
     element = arr.pop(); 
     //rest of code 
    } 
} 

把測試遞減是不寫for循環的正常方式。

甚至更​​多正常:

if (arr && arr.length > 0) { 
    for (i = arr.length - 1; i >= 0; --i) { 
     element = arr.pop(); 
     //rest of code 
    } 
} 

...但你不使用i,也沒有多大意義。

或者你可以使用一個while

if (arr && arr.length > 0) { 
    i = arr.length; 
    while (i--) { 
     element = arr.pop(); 
     //rest of code 
    } 
} 
+0

@ElliotBonneville:我沒有。他不使用'我',他使用'流行'。 –

+0

哦,對,好點。 :P +1 –

+0

你知道......我不記得我爲什麼這麼做了,過了漫長的一天。 :) 謝謝。 – Shane

0

呀 - 這樣的事情應該做的伎倆:

for (i = arr.length; i > 0; i--) { 
0

使用jshint相當的JSLint和關閉警告。

1

對於未來的讀者,如果你減少了數組的長度,不使用for循環,使用while

if (arr) { 
    while (arr.length) { 
     element = arr.pop(); 
     ... 
    } 
} 
+0

乾杯......現在不會這樣做......有點尷尬地在這裏看到它 – Shane