2013-06-26 3 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

Интересным следствием отсутствия объема блочного уровня является то, что вы можете прочитать или записать переменную до ее объявления, до тех пор, как объявляется до завершения функции. Это из-за метода под названием hoisting, что означает, что компилятор перемещает все объявления переменных в начало функции. Например, следующий код компилируется, даже если функция первоначального следа() для переменной Num происходит перед переменной NUM объявлена:

Моей личной тенденция просто привести определение Наверху себя, чтобы избежать дополнительные предупреждения, которые заставляют меня пропускать более важные проблемы. Выйдя из AS3 на некоторое время, но в крупных проектах люди отпускают вещи, и в итоге вы получаете 100-тысячные предупреждения и релевантные.