这似乎很愚蠢,但是我不明白为什么这在语法上是不正确的
const foo = a || throw "cannot be undefined"
这很好的时候
const b = () => throw 'cannot be undefined'
const foo a || b()
答案 0 :(得分:4)
throw
是一个声明。
b()
是一个表达式。
a || b
接受两个表达式,并产生一个表达式。
每个表达式都可以是一个语句。反之则不成立。
请注意,这也不是语法上的(与您主张的相反):
const b = () => throw new 'cannot be undefined'
但这是
const b = () => { throw new 'cannot be undefined' }
因为箭头函数有两种形式:
params => expression
或params => { statement* }