JSの参照付与と伝値付与

997 ワード

他の人のコードを叩くつもりで、自分で感じてください.そして最初から問題にぶつかった.なぜ次の例のa.xがなぜか想像できない.基礎が小さいので、jsの中の引用賦値と伝値賦値の違いがあると言われています.良いドキュメントを添付して、この問題をよく解決しました.http://www.cnblogs.com/cench/p/6019453.html
var a={"x":1};
var b=a;
b.x=2;
a.x;
/*
2
*/

JS数字のタイプ:基本タイプと参照タイプ;基本タイプ:number、stringタイプはすべて基本タイプで、基本タイプはスタック領域に保存され、アクセス時に値によってアクセスし、付与値は普通の方法で付与されます.
リファレンスタイプ:オブジェクトと配列はリファレンスによって割り当てられます.参照タイプはオブジェクトを指します.プロパティとメソッドを持つことができ、そのプロパティとメソッドを変更することができます.参照オブジェクトの格納方法は、スタックにオブジェクト変数表示名とそのオブジェクトのスタック内の格納アドレスを格納し、スタックにデータを格納することです.
オブジェクトは、リファレンス割り当てを使用します.オブジェクトを新しい変数に割り当てると、スタック内のデータではなく、オブジェクトのスタック内のアドレスが割り当てられます.すなわち,2つのオブジェクトは同じ記憶空間を指しており,どのオブジェクトが変化しても実際には変化する記憶空間の内容であるため,2つのオブジェクトは連動している.
var obj = {x:1,y:2};
//obj.x;
/*
1
*/
obj["x"];
/*
1
*/


var a=30;
var b=a;//30
a=20;
b;
a;
var a=[1,2];
var b=a;
a[0]=5;
b;
/*
5,2
*/

var a = [1,2];
var b = a.slice(0);
b[0]=6;
b;

/*
6,2
*/

var a = [1,2,3];
var b = a;
a = [4,5,6];
b;
/*
1,2,3
*/