const
就像let
,它是一个LexicalDeclaration ( VariableStatement, Declaration ),用于在您的块中定义标识符。
您正在尝试将其与default
关键字混合使用,该关键字期望紧随其后的是HoistableDeclaration、ClassDeclaration或AssignmentExpression。
因此它是一个SyntaxError。
如果你想要const
一些东西,你需要提供标识符而不是使用default
.
export
本身接受其右侧的VariableStatement或声明。
以下是好的export default Tab;
Tab
成为AssignmentExpression因为它的名称是default ?
export default Tab = connect( mapState, mapDispatch )( Tabs );
很好
这Tab = connect( mapState, mapDispatch )( Tabs );
是一个AssignmentExpression。
更新:想象问题的不同方式
如果您试图从概念上理解这一点并且上面的规范推理没有帮助,请将其视为“如果default
是合法标识符而不是保留令牌,那么编写export default Foo;
and的不同方式是export default 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 的评论,这将变得模棱两可,因此明确地编写此模式更有意义。