最近在看项目组老大的代码中发现一段有趣的代码,do{...}while(false) + break,觉得非常有意思,就百度了一下用处,果然真被秀到,这里简单做下总结~
直接贴代码进行讲解:
function fn(i) {
let msg = '';
do {
if(i < 0) {
msg = `负数:${i}`;
break;
}
if(i === 0) {
msg = `零:${i}`;
break;
}
if(i > 0) {
msg = `正数:${i}`;
}
if(i % 2 === 0) {
msg = `偶数:${i}`;
break;
}
if(i % 2 === 1) {
msg = `奇数:${i}`;
break;
}
} while (false);
console.log(msg);
}
可以看到这样写的代码 if 条件非常工整,省去了 if else 嵌套或 else if 语法(尤其判断奇偶数部分,满足条件立马结束,无法再往下执行)。
当然这里的例子可能不太恰当,没有体现出使用场合的必要性,即不用 do while false 也能实现同样的效果。其实这种看似怪异的写法,主要是用来取代函数作用域内 goto(JavaScript 中没有 goto 关键字)的作用,再不使用 goto 跳转的前提下使用这种方式可以很优雅地进行代码块的跳转,最主要的是这样书写的条件语句很工整。