JS函数显示错误而不返回,但不需要返回



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

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 行上给出了一个错误,我可以通过在其前面添加回车符来修复它:

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 前面添加返回可以修复错误,为什么添加变量声明首先会导致错误?这应该不复杂,但我不清楚为什么会发生这种情况。

问题是自动分号插入或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++) {
//...
}
}

最新更新