Javascript赋価メカニズムの詳細解
2198 ワード
今日はJavascriptについての質問に答えました.賦に関する問題がありますので、この問題をきちんとまとめたいです.
元の値と参照値
前の記事では、元の値と参照値を紹介しましたが、元の値はUnidefined、Null、Boolean、Number、Stringなどをスタックに保存します.参照値はObjectから集めて、積み上げられています.ここで両者をはっきり区別します.
賦課メカニズム
オリジナルの値と参照値の違いが分かりましたら、Javascriptの割当メカニズムを具体的に紹介します.
Javascriptでは、元の値タイプの変数については、毎回割り当てられた値のコピーが生成され、参照値については、その名の通り、参照割当値によって、同じ記憶対象のメモリに向けられている.元の値の割り当て:
二つのタイプの値を伝達する関数の形参上時間はどうなるかを見てみましょう.1.元の値を渡す
2.参照値の転送
締め括りをつける
もう一回冒頭の問題に戻ります.
var a = 'test';
var b = function() {};
b.a = 'test';
function change(m, n) {
m = 'change';
n.a = 'change';
}
change(a, b);
上記のコードを実行すると変数aとbの値が変わりますか?元の値と参照値
前の記事では、元の値と参照値を紹介しましたが、元の値はUnidefined、Null、Boolean、Number、Stringなどをスタックに保存します.参照値はObjectから集めて、積み上げられています.ここで両者をはっきり区別します.
var a = 'test';
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
パラメータ転送二つのタイプの値を伝達する関数の形参上時間はどうなるかを見てみましょう.1.元の値を渡す
var a = 1;
function test(m) {
m = 2;
}
test(a);
alert(a);// 1
出力は1ですので、関数は変数の値を伝達するだけですので、関数の中のmは1を得て、さらに2を割り当てられます.このプロセスは外部の変数aに影響しません.2.参照値の転送
var A= new Object();
A.x = 1
function test(M) {
M.x = 2;
}
test(A);
alert(A.x);// 2
出力は2ですので、関数が変数の住所を伝えたことを知っています.だから関数の中のMは転送された住所を得て、属性xは2に割り当てられます.同時に同じメモリアドレスを指すAにも影響を与えます.締め括りをつける
もう一回冒頭の問題に戻ります.
var a = 'test';
var b = function() {};
b.a = 'test';
function change(m, n) {
m = 'change';
n.a = 'change';
}
change(a, b);
変数aは元の値であり、変数bは参照値であり、関数内に伝達される一つは値であり、一つはアドレスであるため、関数が実行されると変数aは変わりません.変数bの値は変わります.