JavaScript 第5版 - 4章 変数

JavaScript 第5版の「4章 変数」(49~58ページ)を読み進めていきます。

4.2 変数の宣言

  • 初期値を指定しなかった場合、変数の初期値は未定義値(undefined)になる。

4.2.1 宣言の繰り返しと省略

  • 宣言されていない変数から値を読み出すとエラーになる。
  • 宣言されていない変数に値を代入すると暗黙的に宣言したことになり、その変数は必ずグローバル変数となる。

実際には、必ずvar文を使って明示的に変数を宣言するようにした方がいいですね。

4.3 変数のスコープ

  • 入れ子にした関数は、それぞれの関数ごとに独自のローカルスコープを持つ。

4.3.1 ブロックレベルのスコープはない

  • ブロックレベルのスコープはない。
  • ローカル変数は関数全体で有効になる。

変数の宣言位置に関わらず、ローカル変数は関数全体で有効であるということが重要ですね。

var scope = 'global';

function f() {
    alert(scope);  // undefined
    var scope = 'local';
    alert(scope);  // 'local'
}

f();

4.6 プロパティと変数は違うのか

  • オブジェクトのプロパティと変数は基本的に同じである。

4.6.1 グローバルオブジェクト

  • JavaScriptインタプリタは、コードの実行前にグローバルオブジェクトを生成する。
  • グローバル変数とはグローバルオブジェクトのプロパティである。
  • トップレベルコードでは、thisキーワードはグローバルオブジェクトを参照する。
  • クライアントサイトJavaScriptでのグローバルオブジェクトはWindowオブジェクトであり、thisの代わりにwindowプロパティを使って参照する。

4.6.2 ローカル変数はCallオブジェクトのプロパティ

  • ローカル変数とはCallオブジェクトのプロパティである。

4.6.3 JavaScriptの実行コンテキスト

  • 関数を実行するたびに新しい実行コンテキストが生成される。
  • JavaScriptの実装によっては複数のグローバル実行コンテキストが認められており、実行コンテキストごとに異なるグローバルオブジェクトを持つことが可能である。
  • 複数のグローバル実行コンテキスト間で相互参照が可能であるが、これはセキュリティ上の脅威にもなりうる。

4.7 変数のスコープの再検討

  • 実行コンテキストごとに、オブジェクトを並べたスコープチェーンがある。
  • スコープチェーンに基づいて変数の値を探すことを変数名の解決と言う。

コメント (0)

この記事へのコメントはまだありません。

コメントフォーム

トラックバック (0)

この記事へのトラックバックはまだありません。

この記事のトラックバックURI
http://dxd8.com/archives/54/trackback/
この記事のURI
http://dxd8.com/archives/54/