第四章 算法流程控制

for - in循环是否写 var
理解:不写var 全局变量
,写var:因为没有for循环域的变量,这个for实在test内部的,在test外是访问不到的。
---
循环种类 for(), while(){}, do{}while(),for - in循环四种
1 for - in 不能 用于数组循环
2 for-in比较慢 因为会搜索实例原型属性
例子重要
所以除非必要,比如不知道对象属性名的时候用for-in,
其他情况 比如数组循环 知道属性名的时候用for

----
循环性能两方面:迭代次数,每次迭代处理的事务。
记住一种写法:
for(var i=0,len = items.length;i<len;i++){
}//用变量存length 不必每次都算测试循环条件
---
颠倒顺序调高性能。 整个顺序由前到后 由后到前都是可以接受的话,倒序循环提高性能。 倒序循环是计算机编程通用的方法。
提高顺序是因为 比较和是否为true放到一起了 ,详见书p65.
---
减小迭代次数 比如 达夫设备.依次循环处理多个,余数分别出来
达夫设备在1000+以上性能提升明显
<script>
debugger
var arr=[];
for(var
i=0;i<1011;i++){
arr.push("aa"+i);
}
var str2 = "";
var str1 = "";
var i =arr.length % 8;
while(i > 0 ){
str2 += arr[i]+",";
i--;
}
var i = Math.floor(arr.length/8);
i = i*8;
while(i){
str1 += arr[i--]+",";
str1 += arr[i--]+",";
str1 += arr[i--]+",";
str1 += arr[i--]+",";
str1 += arr[i--]+",";
str1 += arr[i--]+",";
str1 += arr[i--]+",";
str1 += arr[i--]+",";
}
debugger
var aaaaaa= 1;
</script>
---
新浏览器 原生支持的forEach
<script>
var arr=[];
for(var
i=0;i<1011;i++){
arr.push("aa"+i);
}
arr.forEach(function(value,index,array){
if(index<3)
alert(index);
}
);
</script>
ie6不支持,firefox chrome支持
---
if-else可以用二叉树分支优化 减少遍历深度
最可能访问的放到最前端。
--
switch代码空间太大,如果case的是数值,且连续
var results=["aaa","bbb","ccc"];
return results[i];
--
浏览器有调用栈限制,太多的递归会报错。解决办法 递归化为迭代 即循环,或者缓存技术。
--
ps合并排序算法:
1 分两半。左面有序,右面有序。
2 左右再排序,形成一个新的。谁小谁拿出来。
机组 数组方法 arr.shift();
<script>
var arr = [1,2,5];
var temp =
arr.shift();
alert(temp);//1
alert(arr) //2,5
</script>
数组concat方法
<script>
var arr = [1,2,5];
var temp = arr.shift();
alert(temp);//1
alert(arr) //2,5
var arrex=[100,200];
arrex =
arrex.concat(10);//可以添数
arrex =
arrex.concat(arr);//可以填数组
alert(arrex);
</script>
---
记住
<script>
function memoryFunc(basefunc,cache){
cache = cache
|| {};
var shell = function(arg){
if(!cache.hasOwnPorperty(arg)){
cache[arg]
= basefunc(arg);
}
return
cache[arg];
}
return shell;
}
var func = memoryFunc(basefunc,{"0":1,"1":1});
</script>