JavaScript中能否让单个if语句控制多段独立代码且仅执行一次判断
实现方案
你只需要提前把test()的执行结果存入变量,后续判断直接复用这个变量值即可,全程test()只会执行1次,且完全不打乱原有代码的执行顺序:
const isPass = test(); if (isPass) { // 第一段受条件控制的代码 console.log(1); } // 中间固定执行、不受条件影响的代码 console.log(2); if (isPass) { // 第三段受条件控制的代码 console.log(3); }
这个写法是通用场景下的最优选择:
- 没有重复执行判断逻辑,性能最优
- 三段代码的执行顺序和原生顺序完全一致,没有多余嵌套
- 后续修改任意一段代码的逻辑都不会影响其他部分,维护成本极低
- 完全适配所有「三段顺序执行、首尾受同一条件控制」的场景,和具体代码内容无关
如果中间固定执行的代码块非常短,你也可以选择分支写法,不需要额外声明变量:
if (test()) { console.log(1); console.log(2); console.log(3); } else { console.log(2); }
注意:如果中间固定执行的代码逻辑很长、复杂度高,不要用这种写法,重复书写相同逻辑会大幅提升后续维护时出bug的概率,优先选择缓存判断结果的方案。
不要滥用运算符短路、多层嵌套自执行函数这类所谓的「黑科技奇技淫巧」实现需求,这类写法会大幅降低代码可读性,对初学者和后续维护的开发者都不友好。
内容的提问来源于stack exchange,提问作者Druby
相关产品推荐
相关产品推荐

