準(zhǔn)備拿別人的代碼敲敲涎永,自己感覺一下;然后剛開始就遇到了問題榨惰。
怎么都想象不來為什么下面的例子中的 a.x為什么 噪舀;因?yàn)榛A(chǔ)比較小白擅威,就有人說道js里面的引用賦值跟傳值賦值的區(qū)別壕探;
附上一個(gè)不錯(cuò)的文檔,也很清楚的解決了這個(gè)問題郊丛;
http://www.cnblogs.com/cench/p/6019453.html
var a={"x":1};
var b=a;
b.x=2;
a.x;
/*
2
*/
JS數(shù)字的類型:基本類型和引用類型李请;
基本類型:number,string類型都是基本類型瞧筛,而基本類型存放在棧區(qū),訪問時(shí)按值訪問,賦值是按照普通方式賦值导盅;
引用類型:對(duì)象和數(shù)組是通過引用來賦值的;
引用類型指的是對(duì)象较幌。可以擁有屬性和方法认轨,并且我們可以修改其屬性和方法绅络。引用對(duì)象存放的方式是:在棧中存放對(duì)象變量標(biāo)示名稱和該對(duì)象在堆中的存放地址,在堆中存放數(shù)據(jù)嘁字。
對(duì)象使用的是引用賦值。當(dāng)我們把一個(gè)對(duì)象賦值給一個(gè)新的變量時(shí)杉畜,賦的其實(shí)是該對(duì)象的在堆中的地址纪蜒,而不是堆中的數(shù)據(jù)。也就是兩個(gè)對(duì)象指向的是同一個(gè)存儲(chǔ)空間此叠,無論哪個(gè)對(duì)象發(fā)生改變纯续,其實(shí)都是改變的存儲(chǔ)空間的內(nèi)容,因此灭袁,兩個(gè)對(duì)象是聯(lián)動(dòng)的猬错。
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
*/