You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

技术问询:能否在函数默认参数中调用该函数自身?

在函数默认参数中调用自身及使用同名函数作为默认值的问题

核心结论

  • 可以在函数的默认参数中调用该函数自身,但极易触发无限递归导致栈溢出,必须搭配明确的终止条件才能正常运行。
  • 可以将同名函数用作默认参数值,因为函数声明会被提升,在默认参数求值阶段已经能访问到该函数的引用。

示例代码分析

你的示例代码如下:

function somename(a,b=somename()){
    return a+b;
}
somename(10);

这段代码执行时会直接触发无限递归:

  1. 调用somename(10),此时a=10,需要计算b的默认值,即调用somename()。
  2. 调用somename()时,a未传参为undefined,又要计算b的默认值,再次调用somename()。
  3. 该过程会无限重复,直到JS引擎抛出Maximum call stack size exceeded(调用栈溢出)错误。

正确使用的示例

如果要在默认参数中调用自身,必须添加终止条件,比如:

function somename(a, b = a <= 0 ? 0 : somename(a - 1)) {
    return a + b;
}
console.log(somename(3)); // 输出 6(3+2+1+0)

这里当a<=0时,b取0,终止递归逻辑,避免栈溢出。

内容的提问来源于stack exchange,提问作者navedhn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 15:10:19