如何用一行代码实现不重复调用falseOrNumber()的条件返回?
解决方案
1. ES2021+ 条件语句内声明变量(推荐)
这是最优雅的一行写法,既避免重复调用函数,又不会额外污染外层作用域:
function otherFunction() { // ... if (const num = falseOrNumber()) return num; // ... }
这里num的作用域仅限于if代码块内部,符合现代JS的最佳实践,代码简洁且语义清晰。
2. 逗号运算符一行写法
如果需要兼容旧版JS环境,可以用逗号运算符把变量声明和判断合并成一行:
function otherFunction() { // ... let num; if (num = falseOrNumber()) return num; // ... }
这种写法本质和你提到的“显而易见的解决方案”逻辑一致,但合并成了一行,满足你对“一行代码”的要求。
3. 立即执行函数表达式(IIFE)
另一种思路是用IIFE包裹逻辑,虽然也是一行,但可读性稍弱:
function otherFunction() { // ... (num => { if (num) return num; })(falseOrNumber()); // ... }
这种写法不需要额外声明变量,但相比前两种,代码的直观性稍差,一般不推荐作为首选。
所有这些方案的核心都是只调用一次falseOrNumber()并缓存结果,避免了原代码中重复调用可能带来的性能问题或副作用(比如函数内部有随机逻辑、状态变更时,两次调用结果可能不一致)。
内容的提问来源于stack exchange,提问作者KorbenDose
相关产品推荐
相关产品推荐

