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

JavaScript如何处理未知值?递归函数中current与history取值疑问

关于递归函数中current/history参数的疑问解答

嘿,我刚看到你的问题,作为一个天天和JS递归打交道的开发者,我来帮你把这个点掰明白~

首先明确说:这不是变量提升(hoisting)的作用,而是ES6函数默认参数的特性!你看的那个递归示例,作者肯定在函数定义的时候,给current和history设置了默认值,只是你可能没留意到细节。比如这类递归函数的常见写法是这样的:

// 函数定义时给current和history加了默认值
function findTargetPath(target, current = 0, history = []) {
  // 第一个if分支:判断当前值是否命中目标
  if (current === target) {
    return `找到路径:${history.join(' -> ')} -> ${current}`;
  }
  // 第二个if分支:当前值超过目标,终止递归
  if (current > target) {
    return '没有可行路径';
  }
  // 第三个if分支:继续递归,更新current和history
  if (current < target) {
    return findTargetPath(target, current + 2, [...history, current]);
  }
}

// 外层调用只传target参数就行
console.log(findTargetPath(10));

你看,当你调用外层函数只传target时,JS会自动用函数定义里给current和history设置的默认值(这里是0和空数组[]),完全不需要手动传这俩参数——这就是为啥三个if分支里能直接用current的值。

再说说你问的「JavaScript如何处理未知值」

这里的“未知值”其实就是未传入的函数参数:

  • 如果函数参数没有设置默认值,JS会把未传入的参数设为undefined。比如:
    function test(a) {
      console.log(a); // 输出 undefined
    }
    test(); // 没传a参数
    
  • 但如果像你看的那个递归示例一样,给参数加了默认值,那JS就会用默认值替代undefined,保证函数逻辑能正常跑起来。

最后区分下变量提升和默认参数

变量提升是指var声明的变量会被提升到当前作用域的顶部(但赋值不会),比如:

console.log(x); // 输出 undefined(因为var x被提升了,但赋值没提升)
var x = 10;

这和你遇到的递归参数问题完全是两回事,别搞混啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:59:40