You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

函数调用中返回函数的最佳方式及代码合法性咨询

你的写法不合法哦,我来帮你梳理问题并修正~

咱先拆解下代码里的问题,分为语法错误逻辑误区两部分:

一、先解决语法上的小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("未知职业类型!"); };
}

修正点说明

  1. 直接把输入框的 value 传给 interviewQuestion,不用在函数里再取 job.value,逻辑更清晰
  2. 在点击事件中,先获取到 interviewQuestion 返回的函数,再手动执行它,这样才能触发console的输出
  3. 增加了判断逻辑,避免没有匹配职业时调用undefined导致报错
  4. 修复了所有语法错误,保证代码能正常运行

内容的提问来源于stack exchange,提问作者user13752749

火山引擎 最新活动