建议29:准确使用循环体(3)
如果for循环的循环条件比较复杂,不是简单的数值迭代,这时for语句就必须考虑如何把循环条件和循环语句联系起来才可以正确地执行整个for循环。因此,根据for结构的运算顺序,for语句首先计算第一个和第二个表达式,然后执行循环体语句,最后返回执行for语句的第三个表达式,如此循环执行。例如:
- for(var a = true, b = 1; a; b ++ ){
- if(b > 9) // 在循环体内间接计算迭代的步长
- a = false;
- alert(b);
- }
在上面的这个示例中,for语句的第三个表达式不是直接计算步长的,整个for循环也没有明确告知循环步长的表达式,如果要确定迭代的步长,就必须依据循环体内的语句。因此,整个for结构的逻辑思维就存在一个回旋的过程。
for循环的特异性导致在执行复杂条件时效率会大大降低。相对而言,while循环天生就是为复杂的条件而设计的,它将复杂的循环控制放在循环体内执行,而while语句自身仅用于测试循环条件,这样就避免了结构的分隔和逻辑的跳跃。例如,使用while结构来表示这种复杂的条件循环的代码如下,这种思维变化的示意图如图1.5所示。
- var a = true, b = 1; while(a) {// 在循环体内间接计算迭代
- if(b > 9)
- a = false;
- alert(b);
- b ++;
- }
(3)从达成目标的角度比较
有些循环的循环次数在循环之前就可以预测,如计算1~100的数字和。而有些循环具有不可预测性,无法事先确定循环的次数,甚至无法预知循环操作的趋向,这些构成了在设计循环结构时必须考虑的达成目标需要解决的问题。即使是相同的操作,如果达成目标的角度不同,可能重复操作的设计也就不同。例如,统计全班学生的成绩和统计合格学生的成绩就是两个不同的达成目标。一般来说,在循环结构中动态改变循环变量的值时建议使用while结构,而对于静态的循环变量,则可以考虑使用for结构。
时间: 2024-10-23 05:02:15