首页 > 解决方案 > 为什么不能“OR Throw”排队?

问题描述

这似乎很愚蠢,但我不明白为什么这在语法上是不正确的

const foo = a || throw "cannot be undefined"

当这很好时

  const b = () => throw 'cannot be undefined'
  const foo  a || b()

标签: javascript

解决方案


throw是一个声明。

b()是一个表达式。

a || b接受两个表达式,并产生一个表达式。

每个表达式都可以是一个语句。反过来不成立。

请注意,这也不符合语法(与您声称的相反):

const b = () => throw new 'cannot be undefined'

但这是:

const b = () => { throw new 'cannot be undefined' }

因为箭头函数有两种形式:

  • params => expression或者
  • params => { statement* }

推荐阅读