2011-08-12 19 views
11

質問に触発int a[] = {1,2,}; Weird comma allowed. Any particular reason?私はAdobeのActionscriptの構文に関する質問を思い出しました。それは、それが宣言された前の変数に値を代入する(Flex 3の中に、少なくとも)が可能であるいくつかの理由Actionscript:宣言される前に変数を割り当てることはなぜ可能ですか?

public function foo() : void { 
     a = 3; 
     var a : int = 0; 
} 

これは何の意味も持ちませんか..?これはAdobe FlexBuilderコンパイラのバグですか?それとも、古いEcmascript版の遺産のせいでしょうか?

答えて

17

ブロックレベルのスコープがないという興味深いことは、関数が終了する前に宣言されている限り、宣言される前に変数を読み書きできることです。これはホイストと呼ばれる技法のためです。つまり、コンパイラはすべての変数宣言を関数の先頭に移動します。たとえば、次のコードは、

Actionscript 3.0 Docs - Variables

+0

+1。とても興味深い。私はこれについて知らなかった。 – TheDarkIn1978

+0

助けてくれてありがとう – paqogomez

3

私が知っている限り、関数の本体実行前にすべての関数の変数を宣言(メモリ割り当てなど)するFlash Virtual Machineの機能です。したがって、ActionScriptコードの関数ブロックのどこかで変数を宣言すると、コンパイラは変数を宣言し、実行時に関数ブロックの先頭で宣言します。

public function foo() : void { 
     var a : int = 3; 
     a = 0; 
} 

あなたは、関数のボディに二回、いくつかの変数を宣言するときに、同じ理由は、コンパイラの警告があります:あなたのコードが同じである理由です。

+0

ありがとうございました!私に少し奇妙に聞こえるが、私は最終的に理由を知っている –

+0

@ミスター・ヘンソン、あなたが何か良いことを待っていない限り、答えを受け入れる必要があります:) – Peter

+0

@ピーター:ああ、私はまだ、学習;) –

0
(引用は、ページの下2/3程度を見つけました)... num個の変数が宣言される前にnum変数の初期trace()関数が発生していてもコンパイル

詳細については、http://wiki.joa-ebert.com/index.php/Local_Variables

関連する問題