export 1
//这里输出的是一个值(1),没有与任何模块内部变量建立联系,所以直接报错。
var m = 1;
export m;
//这里看起来就像是输出了一个变量m作为对外的接口,
理想状态下,认为m这个变量被输出到模块外被使用,并且模块内的m产生引用的关系。
然而现实情况是,变量m在模块中作为一个变量存在,但是通过export导出m时,被导出的只有m的值(1),
所以同样不与内部变量产生联系,于是报错。
如果不好理解,可以看看函数的传参。
let x=1; //声明变量
const foo=(x)=>{x=2}; //声明一个函数
foo(x) //传入x执行函数
console.log(x) // 1
变量x作为foo的参数,只把变量x的值传入foo,x只作为数值的载体,函数内部x并没有与变量x产生直接联系。
只是复制了变量x的值(不谈对象)(这种复制值然后再使用的形式与CommonJS加载模式类似)。
至于究竟为什么不会能直接输出变量?这是es6规定...(猜测与静态编译啥的有关)
export var m = 1;
//这里是直接输出一个声明的变量,变量的值为1;
var m = 1;
export {m};
声明一个m,然后输出变量,这是规定的写法(语法),也是推介的。({}中带有变量,和解构赋值差不多)
var n = 1;
export {n as m};
as 重命名关键词,其他没啥好说的。
这部分我是这样理解,就根据——“export命令规定的是对外的接口,必须与模块内部的变量建立一一对应关系”
也才前不久刚看完阮大大的ES6入门,以上都是个人理解,如果有理解错的地方,请务必指出。