为什么 throw 应该总是在大括号之间?

问题描述 投票:0回答:1

我遇到了像下面的代码这样的情况,因为它是一个箭头函数,并且对于箭头函数中的单行代码,不需要大括号,我没有使用它,它工作得很好。

const test = new Promise((resolve, failure) => {
failure("mistake");
});
const handler = test.catch(() => console.log("it's ok"));

但是在下面的代码中,当我在没有任何大括号的情况下键入

throw
时,它只是引发了异常:

const test = new Promise((resolve, failure) => {
failure("mistake");
});
const handler = test.catch(() => throw new Error("it's not ok"));

但是在

throw
添加大括号后,它又开始正常运行了:

const test = new Promise((resolve, failure) => {
failure("mistake");
});
const handler = test.catch(() => {throw new Error("it's not ok")});

所以我想知道为什么 throw 在任何情况下都需要大括号?

javascript throw
1个回答
0
投票

因为它是一个箭头函数,并且对于箭头函数中的单行代码,不需要花括号

更准确地说,对于单个表达式,不需要花括号。行数并不重要,但单行很常见。关键问题是:什么是“表达式”?

表达式是解析为某个值的一段代码。例如,

2 + 3
是一个表达式;它计算并解析为 5。
console.log("it's ok")
是一个表达式;它调用一个函数,然后解析为该函数的返回值(在本例中为
undefined
)。

但是像

let x = 2 + 3
这样的东西不是一个表达式。它确实包含一个表达式(“2 + 3”部分),但完整的东西是一个“声明”。语句不会解析为值,因此它们不能真正与其他事物组合例如,
console.log(let x = 2 + 3)
let y = (let x = 2 + 3)
是不合法的。

代码

throw new Error("it's not ok")
是一条语句;它不会解析为一个值。因此,它不能用在需要表达的地方。你不能这样做
let x = throw new Error("it's not ok")
,也不能省略箭头函数的大括号。

© www.soinside.com 2019 - 2024. All rights reserved.