直接说结论 递归中的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的值。