2013-06-26 39 views
2

我有代碼看起來像這樣:重複變量定義的後果是什麼?

var variableX:uint = something;  

if (variableX > 1) 
{ 
    var variableY:uint = foo; 
} 
else 
{ 
    var variableY:uint = bar; 
} 

當FlashDevelop中編譯,編譯器提供了以下警告:

Warning: Duplicate variable definition. 

是與AS3和編程我不喜歡的編譯器警告初學者。編譯器眯着眼睛看着我,說:「好吧,夥計,這次我會讓你離開,但我警告你!」然後不告訴我我在做什麼是錯的。

當我做這樣的事情時,我應該知道什麼?我的意思是我明顯可以在if之外定義變量,然後這不會是一個問題,但是也許還有更多的東西呢?或者,編譯器只是提供了一個有用的微調,說:「嘿,你可能意外地創建了兩個同名的變量」?

回答

4

你對警告的評估是正確的。它只是讓你知道已經有一個名稱範圍的變量,你即將重新定義它。這樣你不會意外覆蓋一個變量。雖然他們可能不會出現在同一個範圍,如果您在本頁面檢查變量提升你會看到交易是什麼:http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f9d.html

缺乏的塊級範圍內的一個有趣的含義是 只要在函數結束前聲明瞭 ,就可以在聲明變量前讀取或寫入變量。這是因爲稱爲提升的 技術,這意味着編譯器將所有變量聲明移動到函數的頂部。例如, 下面的代碼編譯,即使對於 初始trace()函數的num變量之前num變量發生聲明:

我個人的傾向是僅僅把定義往上頂自己,以避免額外的警告讓我錯過了更重要的問題。一段時間沒有AS3了,但是在大型項目中,人們會放手,最後會有100s-1000s的警告和相關的警告被埋沒。