JavaScript的算法和流程控制

代码的整体结构是影响运行速度的主要因素之一。代码数量少一定原型速度快,代码数量多却不意味着运行速度一定慢。

1. 循环

  类型:

  1) for由初始化、前测条件、后执行体、循环体组成: for(var i=0;i<10;i++) {循环体}  => for(var i=0,j=10;i<j;i++) {}

   2) while由前测条件和循环体组成:var i=0; while(i<10){循环主体 i++;}

   3) do-while由后测条件和循环体组成, 循环体会至少运行一次操作,再由后侧条件决定是否再次运行:var i=0; do{循环主体} while(i++<10);

   4) for-in可以枚举任何对象的属性名:for(var prop in object) {}

  性能:

   1) for-in性能差一点,相同迭代数,速度为1/7

   2) 性能差不多需要考虑1每次迭代的处理事务2迭代的次数

   3) 优化:

    减少迭代的工作量:减少对象成员及数组项的查询次数;颠倒数组的顺序,如倒序循环(条件只是简单的与0比较);

    减少迭代次数:达夫设备,使一次迭代代替多次迭代操作

        var iterations = Math.floor(items.length/8),   <=>  速度快       var i = items.length % 8,             

            startAt = items.length % 8,                   while(i){

          i  =  0;                            process(items[i--]);

        do {                                }

          switch(startAt) {                       i = Math.floor(items.length/8);

            case 0: process(items[i++]);                while(i) {

            case 7: process(items[i++]);                 process(items[i--]);

            case 6: process(items[i++]);                 process(items[i--]);

            case 5: process(items[i++]);                   process(items[i--]);

            case 4: process(items[i++]);                 process(items[i--]);

            case 3: process(items[i++]);                 process(items[i--]);

            case 2: process(items[i++]);                 process(items[i--]);

            case 1: process(items[i++]);                 process(items[i--]);

           }                                    process(items[i--]);

          startAt = 0;                          }

        }while(--iterations);

  基于函数迭代

  items.forEach(function(value, index, array){//当前数值项的值、索引、数组本身.

    process(value);  

  })

2. 条件语句

  1) 条件数越多(多余两个),使用switch而不是if-else。

if (color == ‘red‘) {                                             switch(color) {

  //代码处理                     case "red":

} else if (color == ‘blue‘) {                 //代码处理

  //代码处理                         break;

} else {                        case "blue":

  //代码处理                         //代码处理

}                              break;

                            default:

                                //代码处理

  2) 单个键和单个值之间存在逻辑映射时,判断条件较多时,查找表比if和switch要快。

3. 递归

function factorial(n) {

   if (n==0) {

      return 1;

   } else {

      return n*factotial(n-1);

   }

 }//存在问题:条件不明确或缺少终止条件会导致函数长时间运行,并使得用户界面处于假死状态。还有调用栈大小的限制

1) 调用栈限制,调用栈的大小限制了递归算法在JavaScript中的应用

    取溢出异常   try {

             recurse();

          } catch {

           alert("too much recursion!");

          }

2) 递归模式:直接递归模式(函数调用自身); 隐伏模式(两个函数相互调用,形成一个无限循环)

3) 迭代,防止栈溢出

    合并排序算法是最常见的用递归实现咋算法。

 4) Memoization,防止栈溢出

时间: 2024-07-31 07:14:38

JavaScript的算法和流程控制的相关文章

Unit04: JavaScript 概述 、 JavaScript 基础语法 、 流程控制

Unit04: JavaScript 概述 . JavaScript 基础语法 . 流程控制 my.js function f3() { alert("唐胜伟"); } demo1.html  演示点击按钮,弹出提示框 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <

高性能javascript学习笔记系列(4) -算法和流程控制

参考高性能javascript for in 循环  使用它可以遍历对象的属性名,但是每次的操作都会搜索实例或者原型的属性 导致使用for in 进行遍历会产生更多的开销 书中提到不要使用for in 遍历数组 1 首先for in 会查找原型链上的属性 var arr = [1,2,3]; Array.prototype.a = "test"; for(var i in arr) { console.log(i); console.log(typeof i); }//在这里例子中会发

高性能JS笔记4——算法和流程控制

一.循环 for.while.do while三种循环的性能都没有多大区别.foreach 的性能较其他三种差 . 既然循环没有多大区别,注意循环内的代码控制. 减少迭代次数. 减少迭代工作量. 推荐写法: for(int i=0, l = array.length; i < l; i++) { int v = array[i]; }; 二.条件语句 if else 和 switch语句较少时,if else较易读.分支多时,从性能或易读上都倾向于switch. 优化条件语句: 最小化到达正确分

黑马程序员—C语言的基本运算以及流程控制学习的注意点

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 在学习基本算法与流程控制之前,先补充在学习C语言基础语法时的变量内存分析以及scanf函数的一些用法注意. 一.变量内存分析:不同的数据类型所占用的字节是不一样的,数据越大,所占用的字节数就越多,在系统分配内存时,内存寻址是由大到小的,在系统中验证输出内存地址的C语言语句是:printf("变量的内存地址是:%p" , &变量名).其中&是一个地址运算符,用来取得变量

HTML5独家分享:原生JavaScript学习笔记2——程序流程控制

当当当当 .....楼主又来了!新一期的JS学习笔记2--程序流程控制更新了! 当当当当 .....楼主又来了!新一期的JS学习笔记2--程序流程控制更新了! 想一键获取全部JS学习笔记的可以给楼主留言哦! js中的程序控制语句 常见的程序有三种执行结构: 1. 顺序结构 2. 分支结构 3. 循环结构 顺序结构:程序从第一行开始执行,按顺序执行到最后一行 分支结构:就像一条岔路口,必须选择且只能选择其中一条道路继续走下去,不能同时执行两个分支里的代码. 我们可以使用如下三种方式来实现程序的分支

JavaScript学习笔记——javascript流程控制

javascript流程控制流程:就是程序代码的执行顺序.流程控制:通过规定的语句让程序代码有条件的按照一定的方式执行. 一.顺序结构 按照书写顺序来执行,是程序中最基本的流程结构. 二.选择结构(分支结构.条件结构) 根据给定的条件有选择的执行形相应的语句. (1) if else if else 1.单路分支 //条件可以是表达式也可以是任何的数据类型 //大括号会把他里面的代码当作一个整体来运行,如果只有一条语句,可以省略大括号 if(条件){ 条件成立执行的语句 } 2.双路分支 if(

JavaScript小结2——流程控制

JavaScript中的流程控制基本上与java一样 分为顺序结构,选择结构(分支结构,条件结构),循环结构 1.顺序结构 是按照书写的顺序来执行,是程序中最基本的结构 2.选择结构 2.1 if - else 语句 if(grade > 90){ document.write("优秀"); }else if(grade > 80){ document.write("良好"); }else if(grade >70){ document.write

javascript 运算符,流程控制,四种变量,函数一级页面交互

每一种语言中都有自己的运算符,表现方式都有一些区别. javascript运算符如下: - 赋值运算符 前提:x=5,y=5 | 运算符 | 例子 | 等同于 | 运算结果 | | :----- | :--- | ------ | -------- | | = | x=y | | 5 | | += | x+=y | x=x+y | 10 | | -= | x-=y | x=x-y | 0 | | *= | x*=y | x=x*y | 25 | | /= | x/=y | x=x/y | 1 |

python 之 前端开发( JavaScript变量、数据类型、内置对象、运算符、流程控制、函数)

11.4 JavaScript 11.41 变量 1.声明变量的语法 // 1. 先声明后定义 var name; // 声明变量时无需指定类型,变量name可以接受任意类型 name= "egon"; ? // 2. 声明立刻定义 var age = 18; 2.变量名命名规范 1.由字母.数字.下划线.$ 组成,但是不能数字开头,也不能纯数字2.严格区分大小写3.不能包含关键字和保留字(以后升级版本要用的关键字).如: abstract.boolean.byte.char.clas