网站建设html代码如何添加,wordpress分类详细信息,seo实战培训王乃用,所有网页游戏网址多分支结构的优化有很多好处#xff1a;既方便代码维护#xff0c;又可以提升代码执行效率。例如#xff0c;设计有多个条件#xff0c;只有当多个条件都成立时#xff0c;才允许执行特定任务。示例1遵循简单的设计思路#xff0c;使用多重分支逐个检测这些条件。if (a) …多分支结构的优化有很多好处既方便代码维护又可以提升代码执行效率。例如设计有多个条件只有当多个条件都成立时才允许执行特定任务。示例1遵循简单的设计思路使用多重分支逐个检测这些条件。if (a) {if (b) {if (c) {if (d) {console.log(所有条件都成立); }else {console.log(条件 d 不成立); }} else {console.log(条件 c 不成立); }} else {console.log(条件 b 不成立); }} else {console.log(条件 a 不成立); }示例2上述设计没有错误结构嵌套合法。不过可以使用逻辑运算符进行优化。if (a b c d) {console.log(所有条件都成立); }比较而言使用 if 语句逐个检测每个条件的合法性并对某个条件是否成立进行个性化处理以方便跟踪。但是使用 if (a b c d) 条件表达式就没法进行过程跟踪。例如如果 a 条件不成立则程序会自动退出整个流程而不管 b、c 和 d 的条件是否成立。这会使代码跟踪变得很困难。示例3优化设计思路采用排除法对每个条件逐一进行排除如果全部成立则再执行特定任务。在排除过程中使用一个标志变量把每一次条件检测联系在一起最后根据这个标志变量决定是否完成特定任务。var t true; //初始化标志变量为trueif (! a) {console.log(条件 a 不成立!);t false; //如果条件a不成立则标志变量为false}if (! b) {console.log(条件 b 不成立!);t false; //如果条件a不成立则标志变量为false}if (! c) {console.log(条件 c 不成立!);t false //如果条件a不成立则标志变量为false}if (! d) {console.log(条件 d 不成立!);t false; //如果条件a不成立则标志变量为false}if (t) { //如果标志变量为true则执行特定任务console.log(所有条件都成立!);}排除法有效避免了条件嵌套的复杂性不过这种设计也存在一定的局限性例如一旦发生错误后面的操作将被放弃。为此还可以再设计一个标志变量来跟踪错误。数据映射在多分支检测中表达式的重复运算会影响性能。如果检测的条件满足下面两条可以考虑使用数据映射来快速匹配这样有助于代码的可读性大大提高了代码的响应速度。条件体的数量庞大测试的条件值呈现离散状态实现方法通过数组或普通对象实现。示例1在下面代码中使用 switch 多分支检测离散值。function map(value) {switch (value) {case 0 : return result0;case 1 : return result1;case 2 : return result2;case 3 : return result3;case 4 : return result4;case 5 : return result5;case 6 : return result6;case 7 : return result7;case 8 : return result8;case 9 : return result9;default : return result10}}示例2针对示例 1 可以使用数组查询替代 switch 语句。下面代码把所有离散值存储到一个数组中然后通过数组下标快速检测元素的值。function map(value) {var results [result0,result1,result2,result3,result4,result5,result6,result7,result8,result9,result10]return results[value];}使用数据映射法可以消除所有条件判断但由于没有条件判断当候选值数量增加时基本不会增加额外的性能开销。如果每个键映射的不是简单的值而是一系列的动作则使用 switch 更适合。当然也可以把这些动作包装在函数中再把函数作为一个值与键进行映射。示例3如果条件查询中键名不是有序数字则无法与数组下标映射这时可以使用对象数据映射法。function map(value) {var results {a : result0,b : result1,c : result2,d : result3,e : result4,f : result5,g : result6,h : result7,i : result8,j : resukt9,k : result10}return results[value];}调整分支顺序在多分支结构中各种条件存在先后、轻重的顺序。如果把最可能的条件放在前面把最不可能的条件放在后面那么程序被执行时总会按照代码先后顺序检测所有条件直到发现匹配的条件时才停止。如果把最可能的条件放在前面就等于降低了程序的检测次数自然也就提升了分支结构的执行效率避免空转。这在大批量数据检测中效果非常明显。示例1对于一个论坛系统来说普通会员的数量要远远大于版主和管理员的数量。大部分登录的用户都是普通会员如果把普通会员的检测放在分支结构的前面就会减少每次检测的次数。switch (level) { //优化分支顺序case 1 :console.log(普通会员);break;case 2 :console.log(版主);break;case 3 :console.log(管理员);break;default :console.log(请登录);}在性能影响不大的情况下遵循条件检测的自然顺序会更易于理解。示例2设计检测周一到周五值日任务安排的分支结构。可能周五的任务比较重要或者周一的任务比较轻但是对于这类有着明显顺序的结构遵循自然顺序比较好。打乱顺序把周五的任务安排在前面对于整个分支结构的执行性能没有太大帮助打乱的顺序不方便阅读。因此按自然顺序来安排结构会更富有可读性。switch (day) {case 1 :console.log(周一任务安排);break;case 2 :console.log(周二任务安排);break;case 3 :console.log(周三任务安排);break;case 4 :console.log(周四任务安排);break;case 5 :console.log(周五任务安排);break;default :console.log(异常处理);}分支之间的顺序应注意优化当然对于同一个表达式内部也应该考虑逻辑顺序问题。由于逻辑与或逻辑或运算时有可能会省略右侧表达式的计算如果希望右侧表达式不管条件是否成立都被计算就应该考虑逻辑顺序问题。示例3有两个条件 a 和 b其中条件 a 多为真而 b 是一个必须执行的表达式那么下面逻辑顺序的设计就欠妥当。if (a b) {//执行任务}如果条件 a 为 false则 JavaScript 会忽略表达式 b 的计算。如果 b 表达式影响到后面的运算则不执行表达式 b自然会对后面的逻辑产生影响。因此可以采用下面的设计思路在 if 结构前先执行表达式 b这样即使条件 a 的返回值为 false也能够保证 b 表达式被计算。var c b;if (a b) {//执行任务}