es6的箭头函数为啥没有返回值?

新手上路,请多包涵
const getTitleById = (idArr) => {
  for (let subject of subjectList) {
    let text = '';
    if (subject.id === idArr[0]) {
      text = text + subject.title + ' / ';
      for (let subjectChild of subject.children) {
        if (subjectChild.id === idArr[1]) {
          text = text + subjectChild.title;
          return text;
        }
      }
    }
  }
}

直接调用上述箭头函数,为啥返回值是undefined? 用下面的普通函数写法就可以

function getTitleById(idArr) {
  for (let subject of subjectList) {
    let text = '';
    if (subject.id === idArr[0]) {
      text = text + subject.title + ' / ';
      for (let subjectChild of subject.children) {
        if (subjectChild.id === idArr[1]) {
          text = text + subjectChild.title;
          return text;
        }
      }
    }
  }
}
阅读 2.4k
4 个回答
subjectList = [{id:1,children: [{id: 2}]}];
const getTitleById = (idArr) => {
  for (let subject of subjectList) {
    let text = '';
    if (subject.id === idArr[0]) {
      text = text + subject.title + ' / ';
      for (let subjectChild of subject.children) {
        if (subjectChild.id === idArr[1]) {
          text = text + subjectChild.title;
          return text;
        }
      }
    }
  }
}
getTitleById([1,2,3])

实测有返回啊。没返回的情况就是 for 或者 if 没进去

image.png

undefined 也是一种返回。
如果要写一个返回值类型完全一致的函数,那么应当给所有判断分支的代码块末尾都添加 return 语句,或者统一在函数体内最后一行返回。

理论上来说,箭头函数和普通函数的主要区别之一就是this的指向不同,你的两段代码没有涉及到this,所以执行结果应该没有区别,不知道你是怎么调用的。

你调用 getTitleByID 不就可以了吗?
一个是 函数表达式函数声明式 的区别需要了解一下的。

并且你的这个业务代码也可以精简一下:

const getTitleById = (idArr) => {
  const subject = subjectList.find(subject=> subject.id === idArr[0])
  const subjectChild = subject.children.find(subjectChild => subjectChild.id === idArr[1])
  return subject.title + '/' + subjectChild.title
}

因为我看你是直接在 for 循环里面 return 了,所以猜测并不是需要拼接多个项的标题,只是想返回完整的二级标题。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题