JS值傳遞和引用傳遞出現的問題



在做項目的時候因爲js的引用傳遞,導致代碼邏輯錯誤,尋找錯誤的過程相當曲折,現在把代碼貼出,供後來人查閱。


var fids = funMsg.ids
var c = 0;
var yfids = funMsg.ids;
try {
	for(var i = 0; i < yfids.length; i = i + 1) {
		for(var v = 0; v < ids.length; v = v + 1) {
			if(ids[v] == yfids[i]) { //如果ID中存在有匹配的話,則消除這個未讀id,size減一
				try {
					if(fids[i - c] != null) {

						fids.splice(i - c, 1); //刪除一個
					}
					c = c + 1;
					funMsg.size = funMsg.size - 1;
					jl = jl + 1;
				} catch(e) {
					console.log(e.message)
				}
				break;
			}
		}
	}
        funMsg.ids = fids;
	funMsgs[key] = funMsg;
} catch(e) {
	console.log(e.message)
}
 

很明顯的一段代碼, 我想要做到的就是清除ids與fids中值相同的字符串,結果因爲var fids=funMsg.ids 和 var yfids=funMsgs.ids 是屬於引用傳遞,他們共享了一個值,導致代碼邏輯錯誤,沒有達到預想效果。

最終修改方法

var fids =  JSON.parse(JSON.stringify(funMsg.ids)); //修改的地方,使用JSON轉換來消除地址傳遞,也可以自己百度克隆對象的方法來克隆對象。
var c = 0;
var yfids = funMsg.ids;

try {
	for(var i = 0; i < yfids.length; i = i + 1) {
		for(var v = 0; v < ids.length; v = v + 1) {
			if(ids[v] == yfids[i]) { //如果ID中存在有匹配的話,則消除這個未讀id,size減一
				try {
					if(fids[i - c] != null) {

						fids.splice(i - c, 1); //刪除一個
					}
					c = c + 1;
					funMsg.size = funMsg.size - 1;
					jl = jl + 1;
				} catch(e) {
					console.log(e.message)
				}
				break;
			}
		}
	}
        funMsg.ids = fids;
	funMsgs[key] = funMsg;
} catch(e) {
	console.log(e.message)
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章