DEMO: var testobj = document.getElementById("test"); for(var i=0;i<testobj.childNodes.length;i++){ var oText = testobj.childNodes[i].innerHTML; if(oText==""){ alert("Item "+i+" is null"); } } 原理:
//优化后 var testobj = document.getElementById("test"); var oText = ""; var i = testobj.childNodes.length; for(;i>-1;i--){ oText = testobj.childNodes[i].innerHTML; if(oText==""){ alert("Item "+i+" is null"); } }
该例主要是看内存的分配,重点优化应该是将循环中的定义变量操作放到循环外,这样就不会重复分配内存空间;另外一些优化可以考虑递减循环操作,循环外定义变量i的值,如下:
var testobj = document.getElementById("test");
var oText = "";
var i = testobj.childNodes.length;
for(;i>-1;i--){
oText = testobj.childNodes[i].innerHTML;
if(oText==""){
alert("Item "+i+" is null");
}
}
M2说testobj.childNodes[i].childNodes比testobj.childNodes[i].innerHTML快,暂且不提;
月MM说,关键的问题是循环体内没有必要对oText重复初始化,而不是重复声明;因为for不是一个scope,对于js来说;但是对于其他一些语言如C或者Java显然是有区别的;