网站模版购买,wordpress只导出设置,网络营销推广策划步骤,建设服装网站的意义[ES6]模块 特点export 与 import基本用法导入导出基本方式导入导出等价方式html 导入 别名导出默认导出基本用法默认导出对象 复合使用import 命令的特点只读属性单例模式静态执行特性 在 ES6 前#xff0c; 实现模块化使用的是 RequireJS 或者 seaJS(分别是基于 AMD 规范的模… [ES6]模块 特点export 与 import基本用法导入导出基本方式导入导出等价方式html 导入 别名导出默认导出基本用法默认导出对象 复合使用import 命令的特点只读属性单例模式静态执行特性 在 ES6 前 实现模块化使用的是 RequireJS 或者 seaJS(分别是基于 AMD 规范的模块化库 和基于 CMD 规范的模块化库)
ES6 引入了模块化其设计思想是在编译时就能确定模块的依赖关系以及输入和输出的变量
ES6 的模块化分为导出(export) 与导入(import)两个模块
export 命令用于规定模块的对外接口import 命令用于输入其他模块提供的功能
特点
ES6 的模块自动开启严格模式不管你有没有在模块头部加上 use strict;
模块中可以导入和导出各种类型的变量如函数对象字符串数字布尔值类等
每个模块都有自己的上下文每一个模块内声明的变量都是局部变量不会污染全局作用域
每一个模块只加载一次(是单例的) 若再去加载同目录下同文件直接从内存中读取
export 与 import
基本用法
模块导入导出各种类型的变量如字符串数值函数类。
导出的函数声明与类声明必须要有名称(export default 命令另外考虑)
不仅能导出声明还能导出引用(例如函数)
export 命令可以出现在模块的任何位置但必需处于模块顶层 import 命令会提升到整个模块的头部首先执行
导入导出基本方式
/*-----export [test.js]-----*/
let myName Tom;
let myAge 20;
let myfn function () {return My name is myName ! Im myAge years old.;
};
let myClass class myClass {static a yeah!;
};
export { myName, myAge, myfn, myClass };/*-----import [xxx.js]-----*/
import { myName, myAge, myfn, myClass } from ./test.js;
console.log(myfn()); // My name is Tom! Im 20 years old.
console.log(myAge); // 20
console.log(myName); // Tom
console.log(myClass.a); // yeah!建议使用大括号指定所要输出的一组变量写在文档尾部明确导出的接口。
函数与类都需要有对应的名称也避免了导出文档尾部无对应名称。
导入导出等价方式
/*-----export [index.js]-----方式1_*/
//对外暴露模块内变量,模块内方法 fn
const a 1;
const fn () {};
export { a, fn };/*-----export [index.js]-----方式2_*/
export const a 张三;
export function fn() {console.log(我是函数 fn);
}/*-----import [xxx.js]-----方式1*/
import { a, fn } from ./index;
/*-----import [xxx.js]-----方式2*/
import * as all from ./index;
all.fn();html 导入
以上都使在对应的 js 文件中 import那么在 html 中通过脚本 script 导入需要设置 type
!-- 也可以设置typets --
script typemoduleimport aaa from ./index;
/script别名导出
别名导出也即 as 的用法
export 命令导出的接口名称须和模块内部的变量有一一对应关系。
导入的变量名须和导出的接口名称相同顺序可以不一致。
//使用 as 重新命名隐藏模块内部的变量
/_-----export [test.js]-----方式1_/;
let myName Tom;
export { myName as exportName };
/_-----import [xxx.js]-----_/;
import { exportName } from ./test.js;
console.log(exportName); // Tom/_-----export [test1.js]-----_/;
let myName Tom;
export { myName };
/_-----export [test2.js]-----_/;
let myName Jerry;
export { myName };/_-----import [xxx.js]----- 方式2_/;
import { myName as name1 } from ./test1.js;
import { myName as name2 } from ./test2.js;
console.log(name1); // Tom
console.log(name2); // Jerry不同模块导出接口名称命名重复或者不想使用原有命名的情况下均可使用 as 重新命名。以上提供了两种方式一种是在 export 时重新命名一种是在 import 时重新命名
默认导出
默认导出即 export default 命令的使用
在一个文件或模块中export、import 可以有多个export default 仅有一个。 export default 中的 default 是对应的导出接口变量。
通过 export 方式导出在导入导出时都要加{ }export default 则不需要。
export default 向外暴露的成员可以使用任意变量来接收。
基本用法
var a My name is Tom!;
export default a; // 仅有一个
export default var c error;
// errordefault 已经是对应的导出变量不能跟着变量声明语句import b from ./xxx.js; // 不需要加{} 使用任意变量接收默认导出对象
/_-----export [index.js]-----_/;
export default {b: 1,a() {console.log(a);}
};
/_-----import [index.js]-----_/;
import aaa from ./index.js;
aaa.a();
console.log(aaa.b);一个文件中只能有一个默认导出默认导出的情况下可以任意命名来引入 复合使用
注import() 还处于提案阶段。
export 与 import 可以在同一模块使用使用特点
可以将导出接口改名包括 default。
复合使用 export 与 import 也可以导出全部当前模块导出的接口会覆盖继承导出的
//简化写法
export { foo, bar } from methods;// 约等于下面两段语句不过上面方式无需导入 foo 与 bar
import { foo, bar } from methods;
export { foo, bar };其它特点示例
/* ------- 特点 1 --------*/
// 普通改名
export { foo as bar } from methods;
// 将 foo 转导成 default
export { foo as default } from methods;
// 将 default 转导成 foo
export { default as foo } from methods;
/* ------- 特点 2 --------*/
//导出methods中所有导出
export * from methods;import 命令的特点
只读属性
不允许在加载模块的脚本里面改写接口的引用指向但可以改写 import 的变量类型为对象的属性值不能改写 import 的变量类型为基本类型的值。
import { a } from ./xxx.js;
a {}; // errorimport { a } from ./xxx.js;
a.foo hello; // a { foo : hello }单例模式
多次重复执行同一句 import 语句那么只会执行一次而不会执行多次。import 同一模块声明不同接口引用会声明对应变量但只执行一次 import 。
import { a } ./xxx.js;
import { a } ./xxx.js;
// 相当于 import { a } ./xxx.js;import { a } from ./xxx.js;
import { b } from ./xxx.js;
// 相当于 import { a, b } from ./xxx.js;静态执行特性
import 是静态执行所以不能使用表达式和变量。
import { f oo } from methods;
// error
let module methods;
import { foo } from module;
// error
if (true) {
import { foo } from method1;
} else {
import { foo } from method2;
}
// error