[Javascript]変数


1.変数の必要性

10 + 20
上記のJavaScriptコードを実行すると、コンピュータはどうなりますか?
図に示すように、メモリ内の任意の位置に数値10、20が記憶されており、CPUはこれらの値を検索して演算を実行する.
演算結果から生成された数値30もメモリ内の任意の位置に記憶される.

ただしjavascriptでは開発者がメモリを直接制御できないため、メモリ値が30のメモリアドレスにアクセスできません.
変数を使用してメモリに格納されている値を取得し、再使用します.
変数とは、値を格納するために保持されるメモリ領域自体またはメモリ領域を識別するために命名された名前です.

2.識別子


変数を使用して、前に説明したコードを再作成します.
var result = 10 + 20;

変数名を識別子として使用することもできます.識別子とは、ある値を区別できる固有の名前です.
識別子resultは、記憶値30のメモリアドレス0 x 0669 F 913を記憶する.すなわち、識別子は、値ではなくメモリアドレスを記憶するメモリアドレスとマッピング関係を確立する.

3.宣言変数


変数宣言とは、メモリ値が保存されているメモリ領域を特定し、メモリ値を準備するために変数名を保存されているメモリ領域のアドレスに関連付けます.
var result;
上記の変数宣言には、変数名を登録し、メモリ値を保存するメモリ領域が含まれます.

JavaScriptエンジンは、宣言および初期化フェーズを使用して変数宣言を実行します.
フェーズ登録変数名resultを宣言し、初期化フェーズでresult変数にデフォルトの未定義値を割り当てて初期化します.

4.変数宣言の実行点と変数エスケープ

console.log(score);

var score;
JAvaスクリプトエンジンは、ソースコードの行を順次実行する前に、まずソースコードを評価します.
実行時以前の評価では、変数が宣言される(宣言フェーズと初期化フェーズ)ため、コンソール.log(score);実行時に参照エラーは発生せず、未定義のものを出力します.
このように,変数宣言がコードの先頭に引き上げられるように,動作のJavaScript固有の特徴を変数エスケープと呼ぶ.

5.割当値

console.log(score); // undefined

var score = 80;

console.log(score); // 80

Javaスクリプトエンジンは、変数の宣言と値の割り当てを1つの文に簡略化しても、変数の宣言と値の割り当てを2つの文に分けて実行します.したがって,未定義の変数に割り当てられて初期化することは不変である.
図に示すように、変数に値を割り当てると、以前定義されていなかったメモリ領域が消去され、メモリ領域に割り当て値80が再記憶され、新しいメモリ領域が保持され、割り当て値80が格納される.
情報源:書籍モダンJavaScript Deep Dive