这是回调函数吗?请帮我检查并修正我编写的回调函数代码
代码检查与修正
你的代码逻辑框架没问题,但回调函数的实现和调用存在两处关键问题,以下是修正后的完整代码及说明:
let username = prompt("Enter your username :"); let password = prompt("Enter your password :"); // 修正正则:原[a-za-z]是重复错误,改为[a-zA-Z]匹配大小写字母 const userValid = /^[a-zA-Z0-9_.]*$/.test(username); const passwordValid = /^[a-zA-Z0-9_]*$/.test(password); // 重构check函数,接收两个回调参数,符合回调设计逻辑 let check = (onSuccess, onError) => { if(userValid && passwordValid){ onSuccess(username); // 传递username到回调,避免依赖全局变量 }else{ onError(); } } // 调整成功回调,接收用户名参数 let correct = (name) => { // 优化日期格式,输出可读的本地化时间 let msg = new Date().toLocaleString(); alert(`Welcome ${name}! Today is ${msg}.`); } let not = () => { alert(`Given username and password pair is not correct. Please try again!`); } // 正确调用check,传入回调函数 check(correct, not);
核心修正点:
- 正则表达式错误:原正则
[a-za-z]是语法冗余且逻辑错误,改为[a-zA-Z]才能正确匹配大小写字母的用户名/密码 - 回调函数的正确实现:原
check函数未接收回调参数,直接调用全局函数,失去了回调的模块化意义;重构后check通过参数接收成功/失败回调,符合回调模式的设计 - 调用逻辑修正:原代码
check(correct,not)是无效调用,因为check之前没有定义参数,修正后可正确传递回调 - 细节优化:优化日期格式为可读字符串,将用户名作为参数传递给回调,减少全局变量依赖
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

