javascript - JS函数显示错误但没有返回,但不需要返回

标签 javascript ecmascript-6

我试图编写一个打印乘法表的简单函数,并提出了以下解决方案:

const oneToTwelveMultiplicationTable = () => {
  [...Array(12).keys()].forEach((num1, i) => {
    [...Array(12).keys()].forEach((num2, j) => {
      console.log((num1 + 1) * (num2 + 1))
    })
  })
}

oneToTwelveMultiplicationTable()

它工作正常,这不是问题,问题是,因为我试图清理响应的格式(我想要更像表格的格式),我做了这个编辑:

const oneToTwelveMultiplicationTable = () => {
  let result = []

  [...Array(12).keys()].forEach((num1, i) => {
    [...Array(12).keys()].forEach((num2, j) => {
      console.log((num1 + 1) * (num2 + 1))
    })
  })
}

oneToTwelveMultiplicationTable()

这在第 4 行给出了一个错误,我可以通过在它前面添加一个 return 来修复它:

const oneToTwelveMultiplicationTable = () => {
  let result = []

  return [...Array(12).keys()].forEach((num1, i) => {
    [...Array(12).keys()].forEach((num2, j) => {
      console.log((num1 + 1) * (num2 + 1))
    })
  })
}

oneToTwelveMultiplicationTable()

我的问题是为什么我需要那个返回?我不是要让函数返回一个值,为什么在 forEach 前面添加 return 会修复错误,为什么添加变量声明首先会导致错误?这应该很简单,但我不清楚为什么会这样。

最佳答案

问题是自动分号插入或 ASI。这是 javascript 的一个“特性”,它允许分号是可选的,但有时它实际上只是为您插入分号。这通常工作正常,但是当一行以 [( 开头时,不会在上一行的末尾插入分号。

所以这两个表达式:

let result = []
[...Array(12).keys()]

被解释为一个表达式:

let result = [][...Array(12).keys()]

这根本不起作用。

return 起作用的原因是它防止该行以 [ 开头,因此解释器会为您在上一行的末尾放置一个分号.

要修复它,您可以使用分号:

let result = [];
[...Array(12).keys()]

或者,使用可以避免问题的简单 for 循环

for (num1 = 0; num1 < 12; num1++) {
  for (num2 = 0; num2 < 12; num2++) {
    //...
  }
}

关于javascript - JS函数显示错误但没有返回,但不需要返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52861402/

相关文章:

javascript - 异步 json javascript 查询失败,仅在 IE 上使用 unicode 字符

javascript - mailgun.js 内联图像附件

javascript - 在 jQuery 中实现这种风格的下拉菜单

javascript - 如何使用 React 子元素创建 <Modal.Title> 等元素

javascript - ES6 promise ,仅当先前的 promise 被拒绝时才链接 promise ,同时保留拒绝原因

javascript - SDK2 : Issues with Rally Grids

javascript - jQuery/JS 查找提交表单的元素

javascript - 你如何检查 ECMAScript 6 类和函数之间的区别?

javascript - 如何从复杂对象数组中获取唯一属性数组

javascript - ES6 解构预处理