我reading here,ES2015允许您导出var
,const
,let
,function
,class
和{{ 1}}。
default
但我不明白为什么。在我的外行看来,应该有export var myVar1 = ...;
export let myVar2 = ...;
export const MY_CONST = ...;
export function myFunc() {
...
}
export function* myGeneratorFunc() {
...
}
export class MyClass {
...
}
和named exports
。
您导出的类型似乎并不重要。我的意思是,当你default exports
时,你是否指定了类型?不,你没有,它的工作原理。另外,导出export default
或var
会有什么不同?它与let
有什么区别?导入模块时,无论如何它都是不可变的(AFAIK)。
那么,为什么必须指定导出的类型?
答案 0 :(得分:6)
您不必指定导出的类型 - 您必须在模块中指定本地绑定的类型。
应该有命名导出和默认导出。
有:
export {localX as exportedX};
export {localX as default};
您提供的所有这些示例实际上都是简写,它们都声明一个局部变量并以相同的名称导出它:
var myVar1 = …;
let myVar2 = …;
const MY_CONST = …;
function myFunc() {
…
}
function* myGeneratorFunc() {
…
}
class MyClass {
…
}
export {
myVar,
myVar2,
MY_CONST,
myFunc,
myGeneratorFunc,
myClass
};
它对
export const
有何不同?导入模块时,无论如何都是不可变的。
您无法在模块中重新分配。导出不会导出值 1 ,它会将绑定导出到您的本地变量。实际上,进口不是一成不变的,它们只是不可写的。
// example.js
export var value; // this one would not work with `const`
export default function(x) {
value = x;
}
// main.js
import write, {value} from 'example';
console.log(value); // undefined
write(42);
console.log(value); // 42
1:在这方面,默认出口有点特殊。 export default …
声明确实允许您直接导出表达式的值(或匿名函数/函数* / class 声明),但在幕后它实际上创建了一个局部变量在您的模块中,名称为*default*
。
答案 1 :(得分:2)
声明变量,函数或新的const值与导出没有任何关系。 var,let或const的行为在模块中是不同的,因此您需要指出它是什么。如果你输出或不输出是另一回事。
值是从模块外部不可变的,但不是来自内部(例如来自另一个导出函数)。
export let mutable = 1;
export const immutable = 2;
export function change() {
mutable = 11; //works
immutable = 22; //throws, the value is const
}
答案 2 :(得分:1)
如果您的导出是默认导出,则不必指定导出内容的名称或类型,因此您可以执行以下操作:
export default "whateveryoulike";
但命名导出是不同的,您必须指定变量名称,以便您可以使用此名称导入它(类型并不重要):
const x = "whateverelse";
const y = "onemore";
export {x, y as z};
答案 3 :(得分:1)
您正在将变量声明与模块导出组合在一起,例如
export const x = 10;
与您不能仅使用
声明变量的方式相同x = 10;
您无法声明变量,然后使用
将其分配给指定的导出export x = 10;
以下是您可以做的事情:
const x = 10;
const y = (arg) => arg + 10;
export { x, y };
这实际上只是将变量声明和命名模块导出的逻辑分开