我有这样一段代码_.each(course,function(value,key){course[key+"test"]=value+1;});这段代码在chrome下,是ok的。但是ie8下会报内存溢出。如果去掉test,就好了。_.each(course,function(value,key){course[key]=value+1;});求大神指点一下。谢谢了。
2 回答
婷婷同学_
TA贡献1844条经验 获得超8个赞
不知道LZ的_.each是什么,很有可能是因为foreach循环会动态查询course的所有键值,由于键值不断增多,造成了死循环,造成内存溢出。比如course是{a:1},死循环过程就是这样:course["atest"]=2;course["atesttest"]=3;course["atesttesttest"]=4;course["atesttesttesttest"]=5;//...ECMAScript的标准里面未定义for-in遍历顺序,新增键是否被遍历完全依赖于UA,无法强制保证新增的键会/不会被遍历到。Themechanicsandorderofenumeratingtheproperties(step6.ainthefirstalgorithm,step7.ainthesecond)isnotspecified.Propertiesoftheobjectbeingenumeratedmaybedeletedduringenumeration.Ifapropertythathasnotyetbeenvisitedduringenumerationisdeleted,thenitwillnotbevisited.Ifnewpropertiesareaddedtotheobjectbeingenumeratedduringenumeration,thenewlyaddedpropertiesarenotguaranteedtobevisitedintheactiveenumeration.Apropertynamemustnotbevisitedmorethanonceinanyenumeration.underscore避免这个死循环的方法是首先用一个数组缓存当前的keys(ECMAScript5里面有Object.keys,fallback方法则是forin循环),然后循环keys数组,这样在遍历过程中增加的key不会被遍历到。functiongetKeys(obj){if(Object.keys){returnObject.keys(obj);}varkeys=[];for(varkeyinobj){if(obj.hasOwnProperty(key)){keys.push(key);}}returnkeys;}varcourse={a:1},courseKeys=getKeys(course);for(vari=0;icourse[courseKeys[i]+"test"]=i; }
添加回答
举报
0/150
提交
取消
