在做項目的時候因爲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)
}