关于递归中的return返回值问题

477 阅读1分钟

直接说结论 递归中的return只返回当前层次的函数,递归仍会继续执行。

那么如何最终获取到返回值呢 直接看代码

export function findCurrentMenuId(MenuList, targetPath, moduleId = 'a6_fin_gl') {
    for (let i = 0; i < MenuList.length; i++) {
        const val = MenuList[i];
        if (val.path === targetPath) {
            //此处返回了我们需要的值,但如调用该函数那么接收到会的是undefined
            return val.menucguid;
        } else if (
            val.cguid === moduleId ||
            val.capplicationid === moduleId ||
            !moduleId
        ) {
            if (val.children) {
                //此处我们在每次递归结束后接收到返回值
                const menuId = findCurrentMenuId(val.children, targetPath,moduleId);
                if (menuId) {
                //接收到返回值后又以返回值返回给上一层的递归
                    return menuId;
                }
            }
        }
    }
}

就像这样,当递归结束的判断完成后返回需要的值,并接收到且再次返回就可以完成递归的返回值传递。最终获取到return的值。