Node.js简易函数返回undefined而非数组问题排查
问题原因及修复方案
你的函数出现问题的核心原因是递归调用分支未返回结果:
当用户选择添加更多用户(输入Y)时,你在if分支里调用了递归函数userTabCreation_stringList(inUserList),但没有将这个调用的返回值通过return传递出去。此时当前函数执行完递归调用后,没有任何return语句,JavaScript函数默认会返回undefined。
只有在用户选择停止添加的else分支里,你才返回了正确的数组。但当存在多次添加操作时,最外层的函数调用会因为中间递归分支没有返回值,最终得到undefined。
修复方法
只需要在递归调用时加上return,让递归的返回值逐层传递回最外层调用:
var readline = require("readline-sync"); function userTabCreation_stringList(inUserList = []) { inUserList.push(readline.question("Veuillez entrer le nom du premier utilisateur : ")); if (readline.question("Voulez vous ajouter un utilisateur supplementaire ? (Y/y : yes)").toUpperCase() === "Y") { // 加上return,将递归结果返回给上层调用 return userTabCreation_stringList(inUserList); }else { console.log(inUserList) // 此时数组正常 return inUserList; } } // Main userList = userTabCreation_stringList(); console.log(userList); // 现在多元素数组也能正确输出
执行逻辑说明
当用户多次选择添加时,每次递归调用的结果都会通过return传递给上一层函数,直到最外层调用接收到最后一次递归返回的完整数组,这样userList就能正确获取到最终的数组值了。
内容的提问来源于stack exchange,提问作者Eeral
相关产品推荐
相关产品推荐

