В некотором роде трудно дать рекомендацию, поскольку в вашем примере отношения между двумя циклами и переключателем остаются непрозрачными ... Но вы всегда можете просто превратить неявный внешний цикл в явный внешний цикл, поместив внутренний цикл в закрытии:
while ( (function() // loop while function returns true
{
while (foo !== bar)
{
switch (fubar)
{
case reallyFubar:
if (anotherFoo == anotherBar)
{
return true; // back to outer loop
}
break;
default:
break;
}
}
return false; // done looping
})()) {};
Прежде чем прибегнуть к чему-то столь уродливому, как это, я, вероятно, попытался бы выделить любой алгоритм, неявный во внутреннем цикле, как отдельную функцию.