23module的语法

/**
* **export命令**
* 需要特别注意:export命令规定的是对外的接口,必须与模块内部的变量建立一一对应的关系
* **以下写法都是错误的**
* export 1;
* var m=1; export m;
* **因为上面2种方式没有对外提供接口,而是直接输出一个值**
* export var m=1; or var m=1;export {m}; or var n=1;export {n as m};
* **同样的,function和class的输出,也必须遵守这样的写法**
* **另外,export语句输出的接口,与其对应的值是动态绑定关系,即通过该接口,可以取到模块内部实时的值**
* **最后,export命令可以出现在模块的任何位置,只要处于模块顶层就可以,如果处于块级作用域内就会报错,**
* **import也一样,因为处于条件代码块之中,就没法做静态优化了,违背了ES6模块的设计初衷**
*/
/**
* **import命令**
*要与export对外接口的名称相同,若要为输入的变量重新取名,要用as关键字
*import命令输入的变量都是只读的,不允许在加载模块的脚本里面改写接口,可以改写变量的属性
*import命令具有提升效果,会提升到整个模块的头部,import命令是在编译阶段执行的,在代码运行之前
* 由于import是静态执行,所以不能使用表达式和变量,这些只有在运行时才能得到结果的语法结构
* **import语句会执行所加载的模块,可能会有import 'moudle'写法,仅仅执行模块,不输入任何值**
* 多次重复执行同一import语句,只会执行一次
*/
/**
* **export default命令**
* 为模块指定默认输出,其他模块加载该模块时,import命令可以指定任意名字
* export default命令只能使用一次,所以import命令后面才不用加大括号
* 本质上,export default就是输出一个叫做default的变量或方法,系统允许你为它取任意名字
* 因为export default命令只是输出一个叫做default的变量,所以它后面不能跟变量声明语句
* export default var a=1 错误 var a=1;export default a; 正确
* export default 43;正确
* 如果想要在一条import语句中,同时输入默认方法和其他接口,可以写成下面这样
* import _, { each, forEach } from 'lodash';
*/

/import 和 export命令只能在模块的顶层,不能在代码块之中/
posted @ 2020-02-13 17:41  onyli  阅读(120)  评论(0)    收藏  举报