JavaScript変数、スコープとメモリの問題

3018 ワード

JavaScriptタイプはばらばらで、値とタイプは変えられます.
基本タイプと参照タイプの値ECMAScript変数は基本タイプと参照タイプを含み、基本タイプは簡単なデータセグメントであり、参照タイプは複数の値からなるオブジェクトである.
  • 基本タイプ:UndefinedNullBooleanStringNumber、基本タイプは値タイプ、変数名は値を表し、操作変数は操作値
  • です.
  • 参照タイプ:Object参照タイプの値はメモリに保存されているオブジェクトであり、操作対象は参照名操作(変数名は参照名)により、参照順に
  • にアクセスする.
    ダイナミック属性
    参照の種類は、属性と方法を動的に追加し、削除することができます.
    var person = new Object();
    person.name = "xiaoming";
    alert(person.name);
    
    変数値をコピー
    基本タイプと引用タイプはコピー時に表現が違っています.(実は値コピーです.参照中は対象の住所を保持しています.もう一つの参照をコピーします.ただし、引用タイプの値はメモリの中のその対象です.)
    var num1 = 10;
    var num2 = num2;
    
    num1およびnum2は、それぞれ独立した10の値であり、互いに影響しない.
    var person1 = new Object();
    var person2 = person1;
    person1.name = "xiaohong";
    alert(person1.name);
    
    person1およびperson2は、同じオブジェクトの参照を保持していますが、参照名は相互に独立しています.参照先は同じです.
    転送パラメータ
    関数へのパラメータの伝達は、前述のコピー変数の値と同じです.
    検出タイプtypeofは、基本的なデータタイプを検出するのに適しています.検出対象はobjectに戻るだけです.私たちは通常、objectがほしいのではなく、より具体的なオブジェクトがほしいのです.instanceofを使用してください.
    var person1 = new Object();
    alert(person1 instanceof Object);
    alert([] instanceof Array);
    
    すべての参照タイプはObjectの例であり、instanceoftrueに戻り、instanceofはオブジェクトの親クラスにtrueに戻る.
    実行環境とスコープ
    実行環境(execution context)は、コンテキストとも呼ばれ、各実行環境には対応する変数オブジェクトがあり、環境内のすべての変数と関数はこの変数オブジェクトに保存されています.コードを使ってこの変数オブジェクトにアクセスできません.
    大域実行環境は最上位の実行環境であり、宿主が異なり、大域実行環境の変数オブジェクトも異なり、ブラウザにはwindowがあり、大域実行環境におけるすべての大域変数と関数はwindowの属性および方法として作成されている.実行環境におけるコードのすべてが実行された後、環境は破壊され、グローバル環境はウェブページやブラウザを閉じる時に破壊されます.
    実行環境チェーンはスタック構造で、関数は環境スタックを実行し、関数は実行済みで、スタックから出ます.
    下位実行環境はすべての上位環境の変数にアクセスできます.
    var name = "xiaoming";
    function changName() {
        if (name === "xiaoming"){
            name = "xiaohong";
        }else {
            name = "xiaoming";
        }}
    changName();
    alert(name);
    
    changName実行環境において、大域変数nameの下位実行環境に同名の属性と方法がある場合には、下位環境を優先的に使用することができる.
    スコープの延長
    まだ分かりません
    ブロックレベルのスコープがありません.JavaScriptには、ブロックレベルのスコープがありません.大域と局部のみです.
    if(true){
        var name = "xiaoming";
    }
    alert(name);
    
    nameは、グローバル実行環境におけるforサイクルにおける制御変数も、グローバル実行環境におけるものである.
    for(var i = 0;i <= 10;i++){
        console.log(i)
    }
    alert(i)
    
    変数を宣言varを使用して宣言された変数は、最も近い実行環境に自動的に追加され、varキーが使用されていない場合は、グローバル環境に追加されます.
    function test() {
        name = "xiaoming";
    }
    test();//         name
    alert(name);
    
    宣言されていない変数を直接使うと、エラーが発生します.
    クエリー識別子
    現在の環境から上へ検索を開始します.
    ごみの回収
    自動ゴミ回収は、一定の時間間隔で周期的に行われます.ゴミ回収には2つの方法があります. のマークを含めて、性能問題をクリアします.参照カウントには循環参照問題があります.具体的には検討しません.