JavaScript 函数调用子表达式可以是尾调用吗?

问题描述

考虑以下返回语句:

return f() || g();

调用 f() 显然不是尾调用,因为如果 f() 为假,函数实际上不会返回。

那么 g() 部分呢,那是尾调用吗?还是我必须像这样重写它:

const temp = f();
if (temp) return temp; else return g();

解决方法

是的,但在实践中没有帮助。

根据standardg()处于尾部位置:

逻辑或表达式:逻辑或表达式 ||逻辑与表达式

返回带有参数调用的 LogicalANDExpression 的 HasCallInTailPosition。

但是,大多数浏览器都don't support 消除了尾调用,而 Chromium 团队并未致力于此,因此无论您如何编写尾调用,都不能在实践中依赖尾调用消除。

> ,

试试看?

出于某种原因,我在睡眠不足的状态下没有发生这种情况:D

function f() {
    return Math.random() > 1 || f();
}

f()

节点表示 RangeError: Maximum call stack size exceeded,Firefox 表示 InternalError: too much recursion

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...