如何将递归打印数字的代码转为单行三元运算符实现?
当然可以实现!
我们可以把递归逻辑完全封装起来,不依赖外部变量和额外函数,用三元运算符写成简洁的单行代码。这里提供两种符合现代JS规范的方案:
方案1:命名箭头函数(推荐,兼容严格模式)
const printNumbers = (counter = 0) => counter <= 50 ? (console.log(counter), printNumbers(++counter)) : null; printNumbers();
说明:
- 把计数器
counter作为函数参数传入,默认值设为0,彻底摆脱外部变量依赖。 - 三元运算符的第一个分支用逗号运算符:先执行
console.log(counter)打印数字,再递归调用printNumbers(++counter)更新计数器。 - 当
counter > 50时,返回null终止递归流程。
方案2:自执行匿名函数(简洁但需注意环境)
((counter) => counter <= 50 ? (console.log(counter), arguments.callee(++counter)) : void 0)(0);
说明:
- 直接创建一个自执行的匿名函数,初始传入
0作为起始计数器。 - 用
arguments.callee引用当前函数实现递归,但要注意严格模式下arguments.callee会被禁用,所以如果你的代码运行在严格模式环境,优先选方案1。
对比你给出的示例,这两个方案都去掉了外部的counter变量和额外的辅助函数,真正实现了单行、无外部依赖的递归打印逻辑。
内容的提问来源于stack exchange,提问作者user14087540
相关产品推荐
相关产品推荐

