在做项目的时候因为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) }