私の歴史と今

振り返ると恥ずかしくなるのが私の歴史。だけどそのときは真面目に書いていた訳でね。そんな今の私を書いていく。

JavaScript 第5版 4.6 プロパティと変数は違うのか

オブジェクトのプロパティと変数は同じもの!!

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

    1. JavaScriptインタプリタが起動するとグローバルオブジェクトを生成する。
    2. グローバルオブジェクトのプロパティがグローバル変数になる。
    3. グローバル変数を宣言すること=グローバルオブジェクトのプロパティlを定義すること
    4. グローバルオブジェクトのプロパティ
      • Infinityプロパティ:無限大値
      • parseIntプロパティ:parseInt()関数
      • Mathプロパティ:Mathオブジェクト
    5. トップレベルコードでは、thisでグローバルオブジェクトを参照できる。
    6. トップレベルコードとは、関数の一部ではないJavaScriptコード部分のこと。
    7. 関数内ではthisの意味が異なる。
    8. クライアントサイドのグローバルオブジェクトはWindowsオブジェクト
    9. Windowsオブジェクトには自己を参照するwindowプロパティが定義されている。
    10. thisの代わりにwindowプロパティを使用してグローバルオブジェクトを参照できる
    11. Windowオブジェクトには、コア言語のプロパティに加えて、navigatorなどのプロパティがある。

なるうほどー。グローバルオブジェクトが存在するのかー。変数を宣言することは、グローバル変数のプロパティを定義することであったとは。びっくりした。

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

    1. ローカル変数もあるオブジェクトのプロパティ
    2. あるオブジェクトとは、Callオブジェクト
    3. 関数の実行中のみ生存
    4. 関数ごとに生成
    5. 関数の引数と変数はCallオブジェクトのプロパティとして格納される
    6. グローバル変数とローカル変数が異なるオブジェクトを使用することで、名前解決をしている。

Callオブジェクトって、関数内のthisじゃないよな。Callオブジェクト自体にアクセスする方法ってあるのかな? Javaにはない面白さがある。

4.6.3 JavaScriptの実行コンテキスト

    1. 関数を実行するたびに実行コンテキストを生成する。
    2. 関数外の実行コンテキストでは、変数(グローバル)定義はグローバルオブジェクトを利用
    3. 関数内の実行コンテキストでは、変数(ローカル)定義はCallオブジェクトを利用
    4. 複数の「グローバル」実行コンテキストが認められている。
      • クライアントサイドJavaScriptでは、フレーム毎にグローバル実行コンテキストが生成される
    5. 実行コンテキストは、相互に参照可能。
    6. セキュリティ的に問題はある(13.8節参照)

「コンテキスト」はスクリプト言語のキーワードだよな。Javaメインだったから取っ付きにくかったけど、理解できれば活用方法の想像が膨らむ。