技术问询:能否在函数默认参数中调用该函数自身?
在函数默认参数中调用自身及使用同名函数作为默认值的问题
核心结论
- 可以在函数的默认参数中调用该函数自身,但极易触发无限递归导致栈溢出,必须搭配明确的终止条件才能正常运行。
- 可以将同名函数用作默认参数值,因为函数声明会被提升,在默认参数求值阶段已经能访问到该函数的引用。
示例代码分析
你的示例代码如下:
function somename(a,b=somename()){ return a+b; } somename(10);
这段代码执行时会直接触发无限递归:
- 调用
somename(10),此时a=10,需要计算b的默认值,即调用somename()。 - 调用
somename()时,a未传参为undefined,又要计算b的默认值,再次调用somename()。 - 该过程会无限重复,直到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
相关产品推荐
相关产品推荐

