鍍金池/ 問答/HTML/ 全局變量被修改

全局變量被修改

如圖為函數(shù)中的一段代碼,countData為全局變量,結(jié)構(gòu)大概如下

countData:{[message:[
              {time: "2018-08-03"},
              {time: "2018-08-03"}
                    ]
           ],
           [photo:[
              {time: "2018-08-03"},
              {time: "2018-08-07"},
              {time: "2018-08-07"},
              {time: "2018-08-07"}
           ]
           ]}

clipboard.png
clipboard.png

第一張圖代碼執(zhí)行后,得到的處理后的listData,而全局變量countData不等于起始的countData
第二張圖代碼執(zhí)行后,得到的處理后的listData,全局變量countData還是原來的值,這個是理想的結(jié)果。

已經(jīng)把全局變量賦給了新的變量,并沒有直接修改全局變量,為什么第一張圖的代碼會對全局變量有影響?

回答
編輯回答
寫榮

“已經(jīng)把全局變量賦給了新的變量”,那個全局變量指向的是一個對象,是個地址引用。 當(dāng)你把countData賦值給listData后,他們兩個指向同一個地址,故只要listData有改動,countData也一定變化。

2018年5月7日 16:59
編輯回答
蝶戀花

你應(yīng)該先要了解哪些是 私有的 哪些是共有的(持有相同引用的)
圖一.

var obj = {name:[1,2]};
var newObj = {};
newObj.name = obj.name;

以上: name屬性這個為newObj私有 但是name的值 [1,2]obj和newObj 共有

//1. 改變name不會影響
newObj.name = [1,3];
console.log(obj)//[1,2]
console.log(newObj)//[1,3]
//2. 但改變name值會影響
newObj.name[1] = 3;
console.log(obj)//[1,3]
console.log(newObj)//[1,3]

圖二.

var obj = {name:[1,2]};
var newObj = obj;

以上:對象之間賦值 newObj里面所有的東西都是和obj共有
不管如何改都會互相影響

//1. 
newObj.name = [1,3];
console.log(obj)//[1,2]
console.log(newObj)//[1,3]
//2. 
newObj.name[1] = 3;
console.log(obj)//[1,3]
console.log(newObj)//[1,3]
2017年12月5日 04:59