2011-06-02 73 views
0

最近我一直在批評我的構建循環for像這樣:在for循環之前定義循環迭代器?

var i:MovieClip; 
for each(i in array) 
{ 
    // be awesome 
} 

或者,

var i:uint = 0; 
for(i; i<10; i++) 
{ 
    // be more awesome 
} 

這讀取更好地爲我個人,但我被罵了吧。 是否有的區別?

+1

你可能想何況這是什麼語言。 – Nemo 2011-06-02 04:37:02

+0

不用擔心,那是怎麼回事。 – Marty 2011-06-02 04:39:48

+1

你甚至可以在for()循環中刪除第一個我爲'(; i <10; i ++)' – grapefrukt 2011-06-02 08:22:34

回答

5

老回答

是:你這樣做的方式,變量住在循環結束後。確保變量不在循環範圍之外,這樣可以確保您永遠不會在循環外意外地引用它。

更新:

至少這是大多數語言如何做到這一點。但是,在ActionScript中,for循環變量位於父項的範圍內!所以在ActionScript中確實沒有區別

+0

以秒爲單位打敗我。 +1 :) – Cephron 2011-06-02 04:37:51

+0

好的答案,我喜歡。 – Marty 2011-06-02 04:38:43

+0

雖然我仍然可以訪問在循環外定義的for循環中的變量.. – Marty 2011-06-02 04:42:09

3

trutheality的答案是大多數語言的最佳考慮因素,考慮到這個問題直到後期才被標記爲actionscript-3,這是一個很好的迴應。

但是,Actionscript使用變量提升,其中變量定義爲的任何地方的變量在該函數中被限定爲該函數而不是其最內部塊。這blog post描述得很好,它在docs on variable scope中提到。由於提升,在循環之前或之內定義變量之間的Actionscript中沒有區別

爲了展示這種瘋狂可以得到,你甚至可以在循環之後定義變量:

for (i = 0; i < 5; i++) { 
    trace(i); 
} 
var i:int; 
+0

毛 - 我不喜歡這一點。儘管ActionScript對我來說很有用,因爲你可以打破循環並在之後返回i的值(就像循環被打破時那樣)。 – Marty 2011-06-02 05:02:24

+0

我也不喜歡它。我不確定他們爲什麼會以這種微妙的方式突破常規。通常人們不會知道這些,直到他們遇到莫名其妙的編譯錯誤。 – Kai 2011-06-02 05:04:24

+0

沒錯,謝謝你的鏈接。 – Marty 2011-06-02 05:06:06