ホームページ  >  記事  >  ウェブフロントエンド  >  Javascriptの代入の仕組みを詳しく解説_基礎知識

Javascriptの代入の仕組みを詳しく解説_基礎知識

WBOY
WBOYオリジナル
2016-05-16 16:30:451357ブラウズ

今日は、割り当ての問題を伴う Javascript に関する質問に答えたので、この質問をうまくまとめたいと思いました。

コードをコピーします コードは次のとおりです:

var a = 'テスト';
var b = function() {};
b.a = 'テスト';
関数の変更(m, n) {
m = '変更';
n.a = '変更';
}
変更(a, b);

上記のコードを実行すると、変数aとbの値は変わりますか?

元の値と参考値

前回の記事では、元の値と参照値について紹介しました。元の値は、未定義、Null、Boolean、数値、文字列などを指します。これらはスタックに格納され、参照値は統合されます。オブジェクトから取得され、ヒープの中央に保存されます。
ここでは、この 2 つを明確に区別する必要があります:

コードをコピーします コードは次のとおりです:

var a = 'テスト';
var b = new String('test');
var A = 'true';
var B = new Boolean('true');

上記の 4 つの変数について、a と A は元の値、b と B は参考値です。

割り当てメカニズム

元の値と参照値の違いを理解した後、JavaScript の割り当てメカニズムを詳しく紹介します。

JavaScript では、プリミティブ値型の変数の場合、各代入によってコピーが生成されますが、参照値の場合、その名前が示すように、参照による代入は同じストレージ オブジェクトのメモリを指します。
元の値の割り当て:

コードをコピーします コードは次のとおりです:

var a = 1;//元の値
var b = a;//変数 b
へのコピーを生成します b = 2;//a
とは関係ありません alert(a);//出力 1

基準値の割り当て:

コードをコピーします コードは次のとおりです:

var A= new Object();//参照値
A.x = 1;
var B = A; //同じメモリを指す参照割り当て
B.x = 2;//B を変更すると A
に影響します alert(A.x);//出力 2

パラメータの受け渡し

次に、2 種類の値を関数のパラメーターに渡す方法を見てみましょう。
1. 元の値を渡します

コードをコピーします コードは次のとおりです:

var a = 1;
関数テスト(m) {
m = 2;
}
テスト(a);
alert(a);//出力 1

出力は 1 なので、関数は変数の値を渡すだけであることがわかります。そのため、関数本体の m は渡された値 1 を取得し、値 2 が割り当てられます。このプロセスは、外部変数 a.

2. 基準値を渡す

コードをコピーします コードは次のとおりです:

var A= 新しいオブジェクト();
A.x = 1
関数テスト(M) {
M.x = 2;
}
テスト(A);
alert(A.x);//出力 2

出力は 2 なので、関数が変数のアドレスを渡すことがわかります。そのため、関数本体の M は渡されたアドレスを取得します。そのため、属性 x には値 2 が割り当てられ、属性を指す A にも影響します。同じメモリアドレスです。

概要

ここで冒頭の質問に戻ります:

コードをコピーします コードは次のとおりです:

var a = 'テスト';
var b = function() {};
b.a = 'テスト';
関数の変更(m, n) {
m = '変更';
n.a = '変更';
}
変更(a, b);

変数 a は元の値、変数 b は参照値です。したがって、関数の実行後、変数 a は変化しません。変数bの値が変わります。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。