chunchunlike

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::
第四章 算法流程控制

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>

posted on 2011-07-31 14:07  chunchunlike  阅读(292)  评论(0)    收藏  举报