Javascript 在JSES6中,为什么如果我导出默认值,那么我就不能单独导出它?
我发现我可以做到:Javascript 在JSES6中,为什么如果我导出默认值,那么我就不能单独导出它?,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,我发现我可以做到: export function Foo() { return <div>hello</div>; } export default Foo; 为什么呢?它们似乎有着相同的用途:将Foo作为默认值单独导出,但第一种形式可以,而第二种形式则不行。我不太清楚这是否是一种语言怪癖,因为我从来没有看到一个简单的导出符号名,但将最后一行更改为这一行是有效的: 这是以下的简写: export { Foo as Foo }; 我怀疑这只是因为语法通常是: e
export function Foo() {
return <div>hello</div>;
}
export default Foo;
为什么呢?它们似乎有着相同的用途:将
Foo
作为默认值单独导出,但第一种形式可以,而第二种形式则不行。我不太清楚这是否是一种语言怪癖,因为我从来没有看到一个简单的导出符号名
,但将最后一行更改为这一行是有效的:
这是以下的简写:
export { Foo as Foo };
我怀疑这只是因为语法通常是:
export [function|const|class|let] Foo ...etc...
MDN提供了多种不同的导出方式
我没有一个答案,为什么
导出Foo
不起作用不是导出{Foo}
实际上相当于`导出{Foo:Foo}字面意思?@RandyCasburn在导入
和导出
中,不是{Foo:Foo}
而是{Foo as Foo}
@RandyCasburn如果是导出默认{Foo}
应该是;只是export{Foo}
将是命名的导出,但在该上下文中它不是一个对象文本,例如,您不能编写export{Foo:Bar}
。对,所以我误解了规范。在幕后,导出名称绑定到具有相同名称的模块标识符。就像任何其他环境记录绑定一样。但是,很明显,这并不能直接转化为语言语法。我从未尝试过将其作为对象文字来编写(谁会呢?),但经过一点尝试后,很容易看到。感谢您的澄清。“我不知道为什么export Foo
不起作用”-这显然是规范不允许的,这还不够吗?:-)甚至不知道你期望它做什么代码>不是有效的语法。你可能正在使用打字脚本吗?
export { Foo as Foo };
export [function|const|class|let] Foo ...etc...