You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bootcamp任务:用户输入首字母大写功能失效求助

问题分析与修复方案

你的代码存在几个关键问题,直接导致首字母大写功能失效,同时还有变量作用域的潜在隐患:

  • 未获取用户输入:sayHello函数里没调用getUserName,导致用户输入的值根本没被拿到
  • 变量作用域错误:getHelloMessage里直接使用nameInput,但这个变量是getUserName的局部变量,这里原本无法访问,浏览器会默认把它当成全局变量处理,属于不合理的写法
  • 首字母大写的对象错误:你现在是对整个"Hello xxx"消息的首字母做大写,但这个消息的首字母本来就是大写的,应该针对用户输入的姓名做首字母大写处理
  • 未处理null情况:用户点击prompt的取消按钮时,返回值是null,这时候也应该显示Hello World!

修正后的代码

// Write your JavaScript code here
function getUserName(){
    let nameInput = prompt("What is your name?");
    return nameInput;
}

function capitalizeFirstLetter(str) {
    // 兼容空字符串或null的情况
    if (!str) return str;
    return str.charAt(0).toUpperCase() + str.slice(1);
}

function getHelloMessage(name){
    // 处理空输入或取消输入的情况
    if (!name) {
        name = "World";
    }
    // 对用户输入的姓名做首字母大写
    const capitalizedName = capitalizeFirstLetter(name);
    return `Hello ${capitalizedName}!`;
}

function sayHello() {
    // 先获取用户输入,再传入消息生成函数
    let userName = getUserName();
    let messageOutputed = getHelloMessage(userName);
    console.log(messageOutputed);
};
sayHello();

关键修改说明

  1. 传递用户输入:在sayHello里先调用getUserName拿到输入值,再把它传给getHelloMessage,彻底解决变量作用域问题
  2. 单独封装大写逻辑:把首字母大写的逻辑抽成独立函数capitalizeFirstLetter,既清晰又能兼容空值情况
  3. 针对姓名做处理:在生成问候消息时,专门对用户输入的姓名调用大写函数,这才是符合需求的处理对象
  4. 完善边界场景:判断输入是否为空或null,覆盖用户取消输入的情况

内容的提问来源于stack exchange,提问作者B. N. B

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 08:40:42