A-A+

ES6之Module模块

2017年01月04日 默认文章 暂无评论

ES6之前 CommonJS 和 AMD分别用于服务器和浏览器。

尽量的静态化,使得编译时就能确定模块的依赖体系。
export命令 显式地指定输出代码,再通过import命令输入。ES6模块不是对象!
  1. import { stat, exists, readFile } from 'fs'; 只加载3个方法,其他方法不加载!
严格模式
es6 自动使用严格模式,    不管你是否声明。
一些限制:
变量必须声明后再使用
函数的参数不能有同名属性,否则报错
不能使用with语句
不能对只读属性赋值,否则报错
不能使用前缀0表示八进制数,否则报错
不能删除不可删除的属性,否则报错
不能删除变量delete prop,会报错,只能删除属性delete global[prop]
eval不会在它的外层作用域引入变量
eval和arguments不能被重新赋值
arguments不会自动反映函数参数的变化
不能使用arguments.callee
不能使用arguments.caller
禁止this指向全局对象
不能使用fn.caller和fn.arguments获取函数调用的堆栈
增加了保留字(比如protected、static和interface)

export 命令
一个模块是一个独立的文件。该文件内部的所有变量,外部无法获取。若希望外部能够读取模块内部的某个变量,就必须使用export关键字输出该变量。
  1. export var firstName = 'Michael';
另外一种写法(推荐)
  1. var firstName = 'Michael';
  2. var lastName = 'Jackson';
  3. export {firstName, lastName};
export还可输出函数或类(class)
  1. export function multiply(x, y) {
  2. return x * y;
  3. };
一般而言,export输出的变量是本来的名字,若需重命名,使用as关键字。
  1. function v1() { ... }
  2. function v2() { ... }
  3. export {
  4. v1 as streamV1,
  5. v2 as streamV2,
  6. v2 as streamLatestVersion 重命名后,v2可以用不同的名字输出两次。
  7. };
export语句输出的接口,与其对应的值是动态绑定关系,即通过该接口,可以取到模块内部实时的值。
  1. export var foo = 'bar';
  2. setTimeout(() => foo = 'baz', 500);
export命令可以出现在模块的任何位置,只要处于模块顶层就可以。如果处于块级作用域内,就会报错import亦如此。

  1. import { lastName as surname } from './profile';
import后面的from指定模块文件的位置,可以是相对路径,也可以是绝对路径,.js路径可以省略。如果只是模块名,不带有路径,那么必须有配置文件,告诉 JavaScript 引擎该模块的位置。

import命令具有提升效果,会提升到整个模块的头部,首先执行。import是静态执行,所以不能使用表达式和变量
多次重复执行同一句import语句,只会执行一次。

整体加载
用星号(*)指定一个对象,所有输出值都加载在这个对象上面。

标签:
Copyright © 花未全开月未圆 保留所有权利.   Theme  Ality

用户登录