第4章:変数

var scope = "global";
function f(){
alert(scope);
var scope = "local";
alert(scope);
}
f();
上記のようなコードでは、1回目のアラートでは「undefined」、2回目のアラートでは「local」が表示される。なぜなら、function f()内の変数scopeのスコープは関数function f ()内全体で有効であるため、関数が始まったときにはすでに宣言されているのと同じであり、1回目のalertの時点でグローバル変数の方のscopeが隠されてしまうから。つまり、下記のコードと同じ処理になる。var scope = "global";
function f(){
var scope;
alert(scope);
scope = "local";
alert(scope);
}
f();
変数を関数の先頭でまとめて宣言するほうがコードが読みやすくなる理由は、ここにある。

JavaScriptはガーベジコレクションという技術を採用しており、変数が参照されなくなった時点でメモリが解放されるのでプログラマがメモリの管理をする必要がない。

JavaScriptにおいてはプロパティと変数は基本的には同じである。グローバル変数はグローバルオブジェクト(クライアントサイドにおいてはイコールWindowオブジェクト)のプロパティであり、ローカル変数はCallオブジェクトのプロパティである。

クライアントサイドJavaScriptの場合、ウィンドウごとに、あるいはウィンドウのフレームごとに異なるグローバル実行コンテキストが定義され、parent.frames[1]、parent.frames[0]、というふうに相互に参照することができる。セキュリティ上の問題については13.8節で。

カテゴリ: JavaScript, サイ本を読む

コメント/トラックバック

トラックバック用URL:

この投稿のコメント/トラックバックフィード:

http://mintlog.com/javascript/four/227/feed/