是if(){do {}; while();}与{}完全相同

时间:2012-06-19 13:47:46

标签: javascript while-loop do-while

if(a)
{
    do
    {
        b();
    }
    while(a);
}

完全像

while(a)
{
    b();
}

5 个答案:

答案 0 :(得分:1)

是的,它们是一样的。
您创建了一种非常难以理解的方法来使用while循环+ do-while来模拟if循环。

你应该读到这个:
Test loops at the top or bottom? (while vs. do while)

  

如果要在循环的第一次迭代之前测试条件,请使用 while 循环。

     

如果要在运行循环的第一次迭代后测试条件,请使用 do-while 循环。

答案 1 :(得分:1)

是的,它们是等价的 如果afalse,则b根本不会执行 如果atrue,则b会一直执行,直到a变为false
对于这两种结构同样如此。

答案 2 :(得分:1)

它们是相同的,我将提供一个示例,您可能实际上想要使用“Do-While”而不是while循环。

do{
    x = superMathClass.performComplicatedCalculation(3.14);
}
while (x < 1000);

而不是

x = superMathClass.performComplicatedCalculation(3.14);
while ( x < 1000);
{
      x = superMathClass.performComplicatedCalculation(3.14);
}

上面显示了使用Do-While的参数。假设行x = superMathClass.performComplicatedCalculation(3.14); 不仅仅是一行代码而是25行代码。如果您需要更改它,那么只需更改一次即可。在while循环中,您必须将其更改两次。

我确实同意这些事情是关闭的,你应该避免它们,但也有一些有利于他们的论据。

答案 3 :(得分:1)

在这种情况下,构造几乎可以互换,但我认为if do while循环在某些情况下很有用,例如,如果需要在循环的所有迭代中保留一些变量,但是如果循环不需要从未被执行过。 (并且假设它可能不是。)例如

        if (condition) {
            LargeComplexObject object = new LargeComplexObject();
            do {
                some action
                ...
                object.someMethod();
                ...
                more actions
            }
            while (condition);
        }

如果该对象的初始化是时间或内存密集的,那么这可能是一个有用的优化,并且预计该循环只会偶尔触发,并且在相关方法的大多数执行中将被跳过。当然在其他情况下它也可能有用,基本上我认为如果在循环开始之前应该执行的事情应该使用if-do-while,只有在输入循环时才会使用。

答案 4 :(得分:0)

,但您应该更喜欢后者。