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();
关键修改说明
- 传递用户输入:在
sayHello里先调用getUserName拿到输入值,再把它传给getHelloMessage,彻底解决变量作用域问题 - 单独封装大写逻辑:把首字母大写的逻辑抽成独立函数
capitalizeFirstLetter,既清晰又能兼容空值情况 - 针对姓名做处理:在生成问候消息时,专门对用户输入的姓名调用大写函数,这才是符合需求的处理对象
- 完善边界场景:判断输入是否为空或null,覆盖用户取消输入的情况
内容的提问来源于stack exchange,提问作者B. N. B
相关产品推荐
相关产品推荐

