我试图编写一个打印乘法表的简单函数,并提出了以下解决方案:
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/