(section01-03 フレームアクションのメソッド定義と関数定義から抜粋)
同一のタイムライン内では同名の変数は1個しか宣言することが許されません。つまり、たとえ異なるキーフレームのフレームアクションでも変数名が同じならばそれは同じ変数であり同じ値が入っています。これをグローバル変数と呼びます。
ところが、メソッドや関数を定義するfunctionブロックの内側で変数を宣言したとき、その変数は個別のfunctionブロックの中だけで利用できる変数になります。これをローカル変数と呼びます。
functionブロックの中と外で同名の変数が定義してあるとき、functionブロックの外の変数はグローバル変数になり、functionの中で宣言した変数はローカル変数になります。もちろん名前の重複エラーになることもありません。
次の例では変数aをfunctionの外で宣言しています。この場合、test1()、test2()のfunction内も含めて同一タイムラインにおいて変数aは共通のグローバル変数になります。
note
[:script:]functionブロックの外で宣言するグローバル変数a
[:script:]test1()ではローカル変数aを宣言して使う
同一のタイムライン内では同名の変数は1個しか宣言することが許されません。つまり、たとえ異なるキーフレームのフレームアクションでも変数名が同じならばそれは同じ変数であり同じ値が入っています。これをグローバル変数と呼びます。
ところが、メソッドや関数を定義するfunctionブロックの内側で変数を宣言したとき、その変数は個別のfunctionブロックの中だけで利用できる変数になります。これをローカル変数と呼びます。
functionブロックの中と外で同名の変数が定義してあるとき、functionブロックの外の変数はグローバル変数になり、functionの中で宣言した変数はローカル変数になります。もちろん名前の重複エラーになることもありません。
次の例では変数aをfunctionの外で宣言しています。この場合、test1()、test2()のfunction内も含めて同一タイムラインにおいて変数aは共通のグローバル変数になります。
note
ムービークリップのタイムラインで定義してあるグローバル変数の値は、ムービークリップのインスタンスごとに保存されます。
[:script:]functionブロックの外で宣言するグローバル変数a
//変数aの宣言 var a:int=100; function test1():void{ //変数aに1加算する a += 1; trace(a); } function test2():void{ //変数aを2倍する a *= 2; trace(a); } //テスト test1(); //出力:101 test2(); //出力:202 trace(a); //出力:202一方、次の例では変数aをfunctionブロックの外だけでなく、test1()のfunctionブロックの中でも宣言して使っています。このとき、続くテストの結果を見るとわかるように、test2()で参照している変数aはブロックの外で宣言している変数aと同じ変数ですが、test1()の中で宣言してある変数aは名前が同じでもtest1()の中だけの変数、すなわちローカル変数であることがわかります。
[:script:]test1()ではローカル変数aを宣言して使う
//変数aの宣言 var a:int=100; function test1():void{ //ローカル変数aの宣言 var a:int=5; //ローカル変数aに1加算する a += 1; trace(a); } function test2():void{ //変数aを2倍する a *= 2; trace(a); } //テスト test1(); //出力:6 test2(); //出力:200 trace(a); //出力:200