今日は、割り当ての問題を伴う Javascript に関する質問に答えたので、この質問をうまくまとめたいと思いました。
上記のコードを実行すると、変数aとbの値は変わりますか?
元の値と参考値
前回の記事では、元の値と参照値について紹介しました。元の値は、未定義、Null、Boolean、数値、文字列などを指します。これらはスタックに格納され、参照値は統合されます。オブジェクトから取得され、ヒープの中央に保存されます。
ここでは、この 2 つを明確に区別する必要があります:
上記の 4 つの変数について、a と A は元の値、b と B は参考値です。
割り当てメカニズム
元の値と参照値の違いを理解した後、JavaScript の割り当てメカニズムを詳しく紹介します。
JavaScript では、プリミティブ値型の変数の場合、各代入によってコピーが生成されますが、参照値の場合、その名前が示すように、参照による代入は同じストレージ オブジェクトのメモリを指します。
元の値の割り当て:
基準値の割り当て:
パラメータの受け渡し
次に、2 種類の値を関数のパラメーターに渡す方法を見てみましょう。
1. 元の値を渡します
出力は 1 なので、関数は変数の値を渡すだけであることがわかります。そのため、関数本体の m は渡された値 1 を取得し、値 2 が割り当てられます。このプロセスは、外部変数 a.
2. 基準値を渡す
出力は 2 なので、関数が変数のアドレスを渡すことがわかります。そのため、関数本体の M は渡されたアドレスを取得します。そのため、属性 x には値 2 が割り当てられ、属性を指す A にも影響します。同じメモリアドレスです。
概要
ここで冒頭の質問に戻ります:
変数 a は元の値、変数 b は参照値です。したがって、関数の実行後、変数 a は変化しません。変数bの値が変わります。