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

为何我的JavaScript switch语句返回undefined?递归函数异常

问题分析与修复方案

核心问题

你的递归函数存在返回值传递缺失的问题:当squares[random]不为null时,你调用了reccursion()但没有用return把递归得到的结果传递回去。这会导致上层递归函数无法拿到下层递归返回的有效值,最终整个函数返回undefined。

修正后的代码

function reccursion(){
    let random = Math.floor(Math.random()*9);
    if(squares[random] == null){
        console.log(random,'random value generated')
        // 原switch语句完全冗余,直接返回random即可
        return random;
    }else{
        // 关键:返回递归调用的结果,确保值能传递到上层
        return reccursion();
    }
}

额外优化说明

原代码里的switch语句完全没必要——你已经生成了0-8的random值,且已经确认squares[random]为null,直接返回random就可以完成需求,不需要逐个case判断返回。

补充解释

递归函数的每一层调用都需要明确返回值,否则当递归深度超过1层时,最外层函数无法获取到最内层递归返回的有效值,就会出现undefined的情况。你控制台能看到有效random值,是因为内层递归确实执行到了console.log并返回了值,但这个值没有被上层递归传递出来。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 18:04:52