JavaScript 编写斜杠反斜杠交替行函数出现undefined输出问题
多余undefined行的产生原因
问题核心是重复触发了两次打印动作,且额外打印了函数的默认返回值:
slash、antiSlash两个函数内部已经执行了console.log,把拼接好的斜杠行输出到控制台,这部分已经是正确的内容。- JS 语法规则中,没有显式书写
return语句的函数,默认返回值为undefined。你在displayLine函数里,又给这两个函数的调用结果套了一层console.log,相当于在正确的斜杠行输出完成后,又额外打印了一次函数的返回值,也就是每打印一行正确内容,就多出来一行undefined。
修复方案(满足多函数实现的练习要求)
两种改法任选,都能消除多余的undefined输出:
方案1:职责拆分(更符合代码规范)
让两个斜杠生成函数只负责拼接、返回对应字符串,不直接执行打印动作,所有打印逻辑统一交由displayLine管理,避免重复逻辑:
displayLine(); function slash(){ let slashContent = ""; for(let i=0; i<11; i++){ slashContent += "/"; } // 将拼接完成的字符串返回,不在函数内部直接打印 return slashContent; } function antiSlash(){ let antiSlashContent = ""; // 按照预期输出的反斜杠长度调整循环次数即可 for(let i=0; i<7; i++){ antiSlashContent += "\\"; } return antiSlashContent; } function displayLine(){ for(let i=0; i<6; i++){ if(i % 2 === 0){ console.log(slash()); } else { console.log(antiSlash()); } } }
方案2:保留原函数内部逻辑,删除冗余嵌套
如果不想改动两个斜杠函数的内部实现,只需要去掉displayLine里套在函数调用外层的console.log即可——因为函数内部已经完成了打印动作,不需要再对返回值做二次打印:
function displayLine(){ for(var i=0; i<6; i++){ if(i % 2 === 0){ // 直接调用函数,不再套外层console.log打印返回值 slash(); } else { antiSlash(); } } }
内容的提问来源于stack exchange,提问作者tamzoro
相关产品推荐
相关产品推荐

