You need to enable JavaScript to run this app. JavaScript 编写斜杠反斜杠交替行函数出现undefined输出问题
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 04:45:05