「JavaScript高級プログラム設計」Chapter 4変数、作用領域とメモリ問題

2543 ワード

Chapter 4変数、スコープとメモリの問題
値の種類
  • 基本タイプ
  • Udefined Null Boolean Number String
  • JavaScriptにおいて、Stringはオブジェクト
  • ではない.
  • 参照タイプ
  • は、複数の値からなることができるオブジェクト
  • 基本タイプの値に属性を追加することはできません.
  • 参照タイプ値instance ofを検出する.
  • リセット=variable instance of constructor
  • alert(person instanceof Object);
    alert(person instanceof Array);
    
    
  • ペアの正規表現は、typeofを使うと「object」
  • に戻ります.
    実行環境とスコープ
  • 実行環境
  • は、変数または関数がアクセスできる他のデータを定義し、それぞれの挙動を決定している.各実行環境には、関連する変数オブジェクトがあります.環境で定義されたすべての変数と関数は、このオブジェクトに保存されます.
  • グローバル実行環境は、最も周辺的な実行環境である.Webブラウザでは、グローバル実行環境はwindowオブジェクトとして認識されているので、すべてのグローバル変数と関数は、windowオブジェクトの属性と方法として作成されます.
  • 各関数には、それぞれの実行環境があります.実行ストリームが関数に入ると、関数の環境が環境スタックに押し込まれます.そして、関数が実行された後、スタックはそれをイジェクトし、制御権を前の実行環境に戻す.
  • コードが環境で実行されると、変数オブジェクトの作用ドメインチェーンが作成されます.作用するドメインチェーンの用途は、実行環境にアクセスできるすべての変数と関数に対する規則的なアクセスを保証することである.スコープの先端は、常に現在実行されているコードのある環境の変数オブジェクトです.この環境が関数である場合、そのアクティブオブジェクトを変数オブジェクトとします.アクティブオブジェクトは最初に一つの変数だけを含んでいます.つまり、argmentsオブジェクト(グローバル環境には存在しません).フィールドチェーンの次の変数オブジェクトは、含まれる環境から来ます.次のオブジェクトは環境を含む環境から来ます.
  • 識別子解析は、スコープに沿って識別子を1段階ずつ検索するプロセスである.検索プロセスは常に、ドメインチェーンの先端から始まり、識別子が見つかるまで段階的に後へ遡る.
  • 実行環境は、グローバル実行環境と関数実行環境に分類される.
  • 拡張作用分域チェーン
  • try-catch文のcatchブロック:新しい変数オブジェクトを作成します.ここには投げられたエラーオブジェクトの声明が含まれています.
  • with文:指定されたオブジェクトを作用領域チェーンに追加します.
  • JavaScriptはブロックレベルのスコープがありません.
  • はJSにおいて、ブロック内で宣言された変数を現在の実行環境に追加する.
  • if (true) {
        var color = "blue";
    }
    alert(color); // "blue"
    
    for (var i = 0; i < 10; i++) {
        doSomething(i);
    }
    alert(i);
    
  • クエリ識別子:
  • は、ある環境において、識別子を読み取りまたは書き込みのために引用する場合、その識別子が実際に何を表すかを検索によって決定しなければならない.検索プロセスは、ドメインチェーンのフロントエンドから開始し、与えられた名前に一致する識別子を上へ段階的に照会する.この識別子がローカル環境で見つかった場合、検索プロセスは停止され、変数が準備されます.この変数名がローカル環境で見つからない場合は、引き続きアクティブドメインチェーンに沿って上へ検索します.検索プロセスはグローバル環境の変数オブジェクトにまでさかのぼります.グローバル環境においてもこの識別子が見つからない場合、変数はまだ宣言されていないことを意味する.
  • var color = "blue";
    function getColor() {
        return color;
    }
    alert(getColor()); // "blue"
    
    var color = "blue";
    function getColor() {
        var color = "red";
        return color;
    }
    alert(getColor()); // "red"
    
    ごみの収集
  • は、IE(8-)にCOM(Component Object Model,コンポーネントオブジェクトモデル)オブジェクトが関与する限り、巡回参照の問題がある.
  • は循環参照を避け、元のJavaScriptオブジェクトとDOM要素との間の接続をできるだけ手作業で切断しないでください.
  • いったんデータが役に立たなくなると、その値をnullに設定することによって、その参照を解放することが望ましい.ローカル変数は、その実行環境から離れると自動的に参照が解除されます.