do{...}while(false)的妙用

364 阅读1分钟

最近在看项目组老大的代码中发现一段有趣的代码,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 跳转的前提下使用这种方式可以很优雅地进行代码块的跳转,最主要的是这样书写的条件语句很工整。