const类似于let,它是一个LexicalDeclaration (VariableStatement, Declaration),用于在块中定义标识符。
你试图将它与default关键字混合使用,default关键字后面会跟着一个吊装声明、ClassDeclaration或AssignmentExpression。
因此它是一个SyntaxError。
如果你想要const的东西,你需要提供标识符,而不是使用default。
export本身接受其右侧的VariableStatement或Declaration。
下面是fineexport default Tab;
Tab成为一个AssignmentExpression,因为它被赋予的名称默认?
导出默认Tab = connect(mapState, mapDispatch)(Tab);很好
这里Tab = connect(mapState, mapDispatch)(Tabs);是一个赋值表达式。
更新:用不同的方式来想象问题
如果您试图从概念上理解这一点,而上面的规范推理没有帮助,可以将其想象为“如果default是一个合法的标识符,而不是一个保留令牌,那么使用哪种不同的方式来编写export default Foo;导出默认const Foo = 1;?"
在这种情况下,展开的写法是
// pseudocode, this thought experiment is not valid JS
export default Foo;
// would be like
export const default = Foo;
export default const Foo = 1;
// would be like
export const default const Foo = 1;
// so would the following line make sense?
const bar const Foo = 1;
有一个有效的论证,展开应该是这样的
// pseudocode, this thought experiment is not valid JS
export default const Foo = 1;
// would be like
const Foo = 1;
export const default = Foo;
然而,根据Sergey的评论,这将变得模糊,因此显式地编写这个模式更有意义。