2010-07-25 98 views
0

我有一個關於Flash錯誤1151的奇怪問題:內部命名空間中的定義i存在衝突。for循環中的Flash錯誤1151

這裏是有問題的代碼:

for(var i:Number=dt.getFullYear(); i >= dt.getFullYear()-90; i--) 
{ 
    dtYear.addItem({label:i, data:i}); 
} //for 

//-*-*-* Month 
for(var i:Number=0; i < months.length; i++) 
{ 
    dtMonth.addItem({label:i, data:i}); 
} //for 

還是比較明顯的例子:

for(var i:Number=0; i < 12; i++) 
{ 
    trace(i); 
} //for 

//-*-*-* Month 
for(var i:Number=0; i < 12; i++) 
{ 
} //for 

的Adobe給出瞭解釋:

You cannot declare more than one variable with the same identifier name within the same scope unless all such variables are declared to be of the same type. In ActionScript 3.0, different code blocks (such as those used in two for loops in the same function definition) are considered to be in the same scope.

該受詛咒這到底是什麼?我的意思是i變量一直存在爲一個數字,作爲一個數字進行了類型化,爲什麼上面的代碼會失敗?

如果我以這種方式修改它,它可以工作,但這是UGLY和爲什麼這是需要的? AAARGGGHHHH ... Flash開發讓我發瘋。給我一把槍:)。有人向我解釋這一個請。

工作代碼:

for(var i:Number=dt.getFullYear(); i >= dt.getFullYear()-90; i--) 
{ 
    dtYear.addItem({label:i, data:i}); 
} //for 

//-*-*-* Month 
for(i=0; i < months.length; i++) 
{ 
    dtMonth.addItem({label:i, data:i}); 
} //for 

回答

3

這就是所謂的可變懸掛,在AS3中存在的變量沒有範圍,編譯器會在您的函數的頂部將所有聲明的變量,所以你不能申報在同一個函數中兩次相同的變量。

Here有關變量用法和更深層信息聲明的文檔。

+0

那麼Flash/AS3從來沒有一個用戶友好的語言/用戶界面:)。多麼愚蠢的行爲:(((。謝謝。 – Jauzsika 2010-07-25 19:31:23

2

簡答:你不能在同一個函數中聲明兩次「var i」。在你的第二個循環中,將「我」改爲「j」,你就會變成金子。