JavaScript変数、スコープとメモリの問題
3018 ワード
JavaScriptタイプはばらばらで、値とタイプは変えられます.
基本タイプと参照タイプの値基本タイプ: です.参照タイプ: にアクセスする.
ダイナミック属性
参照の種類は、属性と方法を動的に追加し、削除することができます.
基本タイプと引用タイプはコピー時に表現が違っています.(実は値コピーです.参照中は対象の住所を保持しています.もう一つの参照をコピーします.ただし、引用タイプの値はメモリの中のその対象です.)
転送パラメータ
関数へのパラメータの伝達は、前述のコピー変数の値と同じです.
検出タイプ
実行環境とスコープ
実行環境(
大域実行環境は最上位の実行環境であり、宿主が異なり、大域実行環境の変数オブジェクトも異なり、ブラウザには
実行環境チェーンはスタック構造で、関数は環境スタックを実行し、関数は実行済みで、スタックから出ます.
下位実行環境はすべての上位環境の変数にアクセスできます.
スコープの延長
まだ分かりません
ブロックレベルのスコープがありません.
クエリー識別子
現在の環境から上へ検索を開始します.
ごみの回収
自動ゴミ回収は、一定の時間間隔で周期的に行われます.ゴミ回収には2つの方法があります.
基本タイプと参照タイプの値
ECMAScript
変数は基本タイプと参照タイプを含み、基本タイプは簡単なデータセグメントであり、参照タイプは複数の値からなるオブジェクトである.Undefined
、Null
、Boolean
、String
、Number
、基本タイプは値タイプ、変数名は値を表し、操作変数は操作値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
の例であり、instanceof
はtrue
に戻り、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つの方法があります.
と
のマークを含めて、性能問題をクリアします.参照カウントには循環参照問題があります.具体的には検討しません.