函数调用中返回函数的最佳方式及代码合法性咨询
你的写法不合法哦,我来帮你梳理问题并修正~
咱先拆解下代码里的问题,分为语法错误和逻辑误区两部分:
一、先解决语法上的小bug
document.querySelector(#textBox)这里的选择器必须用引号包裹,应该改成document.querySelector('#textBox')btn.addEventListener(click, ...)里的事件类型需要是字符串,得写成btn.addEventListener('click', ...)- 代码里的中文引号(“”)要全部换成英文引号("" 或 ''),JS不认中文标点的哦
二、核心逻辑的误区
你想实现“函数返回函数”的思路是对的,但这里有个关键错误:addEventListener 的返回值是 undefined,所以你把它赋值给 jobQuestion 后,jobQuestion 根本不是函数,调用 jobQuestion() 会直接报错。
另外,你的 interviewQuestion 函数返回了一个函数,但你没有执行这个返回的函数,就算前面的问题都解决了,也不会有任何输出。
修正后的代码(实现你的需求)
const btn = document.querySelector('#btn'); const textValue = document.querySelector('#textBox'); // 给按钮绑定点击事件 btn.addEventListener('click', function() { // 先拿到输入框的内容,传给interviewQuestion得到返回的函数 const questionFunction = interviewQuestion(textValue.value); // 只有当匹配到对应职业时,才执行返回的函数 if (questionFunction) { questionFunction(); } else { console.log("抱歉,我们没有针对该职业的问题哦~"); } }); function interviewQuestion(job) { if (job === "driver") { return function() { console.log("你之前有过超速罚单吗?"); }; } else if (job === "doctor") { return function() { console.log("你毕业于哪所大学?"); }; } // 可选:如果没有匹配的职业,返回一个默认函数 // return function() { console.log("未知职业类型!"); }; }
修正点说明
- 直接把输入框的
value传给interviewQuestion,不用在函数里再取job.value,逻辑更清晰 - 在点击事件中,先获取到
interviewQuestion返回的函数,再手动执行它,这样才能触发console的输出 - 增加了判断逻辑,避免没有匹配职业时调用undefined导致报错
- 修复了所有语法错误,保证代码能正常运行
内容的提问来源于stack exchange,提问作者user13752749




