/*
1、変数の型:
JavaScript は弱く型指定されており、変数は任意の型を格納でき、実行時に型は変数になります。
*/
/*
2、変数宣言:
*/
var i;
var i、index; 🎜 >var i = 0, Index = 2;
/*
変数が初期値なしで宣言された場合、値は未定義です。
var で宣言された変数は、delete 演算子を使用して削除できません。
重複した宣言はオーバーライドを生成しますが、エラーは発生しません。
宣言を省略すると、暗黙的に変数が宣言され、グローバル変数として使用されます。
*/
/*
3、変数スコープ:
関数ごとに分割: 関数内で宣言された変数は関数内でのみ実行できます (クロージャは引き続き参照できます)。 >内部変数比率 グローバル変数は優先度が高くなります。例:
*/
var g = 'global';
function check() {
var g = 'local'; log(g) ; // ローカル
}
check();
/* 可能な限り変数には var 宣言を使用します*/
/* ブロックレベルのスコープはありません*/
if ( false) {
var test = 2;
function t() {
console.log('t function')
}
t(); function;
console.log(test); // 未定義;
/*
例外:
テスト値が定義されていません。 ; (宣言と代入の終わり 変数はすべて未定義です)
*/
/* 変数宣言は事前にハングします*/
function f() {
console.log(test) ); // 未定義
var test =
console.log(test); // 'test'
}
//
関数 f() に変換します。 🎜>var test;
console.log(test); // 変数は宣言されているだけなので、未定義に初期化されます
test = 'test'; //変数には値「test」が割り当てられています
}
/* 未定義の変数と割り当てられていない変数*/
console.log(t); // 変数 t を直接使用します。
// 注: 変数に値を直接割り当てる場合、変数は暗黙的に割り当てられます。グローバルとして扱われます;
var t; // 未割り当ての変数、未定義;
/*
4、基本型と参照型:
Number/boolean/null/unknown/type;
配列/オブジェクト/関数の参照型
第 5 版、63 ページ:
文字列をプリミティブ型のように動作する不変の参照型として考えるか、
または次を使用して実装された基本型として考えるか参照型の内部関数の場合、結果は同じです。
つまり、String 型は基本型として動作します。
次の例は、基本型と参照型の違いを示しています。
var a = 3.14;
var b = 4;
console.log(a, b); [1 , 2, 3];
var b = a;
console.log(a, b); // 同じ;
// 配列は参照型であり、変数 a と b は同じメモリ アドレスを指します。
// 変数は基本型の実際の値を保存し、参照型 (クラス) の参照を保存します。 pointer);
/*
5、ガベージ コレクション
参照型には次のような固定サイズがありません。長さはいつでも変更できます。
変数は直接変更できません。参照値は保存されますが、変数 saves はこの場所への参照にすぎません。
そのため、JavaScript はエンティティを保存するためにメモリを動的に割り当てます。
最終的には、このメモリを解放する必要があります。再利用しないと、使用可能なメモリがすべて消費され、システムがクラッシュします。
JavaScript は、ガベージ コレクション [非表示のメソッド] と呼ばれるメソッドを使用します。
オブジェクトが占有しているメモリを解放します。
*/
var s = 'hello ';
var u = s.toUpperCase(); // 'hello' 値は使用できなくなりました。
// 環境内に「hello」参照は存在しません [それを指す変数はありません]
// (割り当てがあるかどうかによってリサイクルが決定されます)
/*
6、属性としての変数
グローバル オブジェクト
ウィンドウ、this、Math;
ブラウザ内: ナビゲーター、画面;
ローカル変数: オブジェクトの呼び出し
オブジェクトの呼び出し
グローバル変数特別なグローバル オブジェクトの属性である場合、ローカル変数は呼び出しオブジェクトの属性と呼ばれます。
関数のパラメーターとローカル変数は、呼び出し元のオブジェクトのプロパティとして保存されます。
(ローカル変数を保存するには独立したオブジェクトを使用します) JavaScript により、ローカル変数が同じ名前のグローバル変数の値を上書きするのを防ぐことができます)
JavaScript 実行環境
JavaScript インタープリターが関数を実行すると、関数の実行コンテキストが作成されます。
実行。コンテキストは、すべての JavaScript コード セグメントが実行される環境です。
関数に属性を持たない JavaScript コードの実行
すべての JavaScript 関数は、独自の実行環境で実行され、独自の呼び出しオブジェクトを持ちます。
JavaScript インタープリターはグローバル実行環境の異なる Run スクリプトで使用でき、これらの環境は切断されておらず、相互に参照できます。
変数スコープの詳細な理解
各 JavaScript 実行環境には、それに関連付けられた JavaScript 実行環境があります。
スコープ チェーンは、オブジェクトのリストまたはオブジェクトのチェーンです。
JavaScript コードは変数 X の値をクエリする必要があり、このチェーンの最初のオブジェクトを調べ始めます。
オブジェクトにオブジェクトという名前の属性がある場合は、以下同様です。
補足:
f() スコープ-> クロージャ スコープ-> var 変数スコープ
-> ; オブジェクトクラス属性スコープ
*/