注意:import命令具备提高效果,无论写在哪一行都会提到模块头部首先执行浏览器
import 模块名 from '路径'缓存
// 引入变量 默认名称 import {firstName, lastName, year} from './profile'; // 须要 改名使用 `as` 关键字 import { lastName as surname } from './profile'; // 总体加载模块 import * as circle from './circle'; // 直接输出默认(匿名)方法(或变量),能够取一个方法名字,如customName import customName from './export-default'; customName(); // 同时输入默认方法和其余变量 import customName, { otherMethod } from './export-default';
输出变量模块化
export var firstName = 'Michael';
或ui
var firstName = 'Michael'; export {firstName};
方法也是一样。
方法还能够直接以function的方式输出,叫作模块的总体加载code
// test.js export function foo() {}; export function foo1() {};
引入时能够直接使用对象
import { foo, foo1 as f } from './test'; foo(); f();
输出时可使用as
重命名变量名继承
export { v1 as streamV1 }
输入默认接口 export default
接口
// export-default.js export default function () { console.log('foo'); }
注意: 输出的必须是一个接口(对象或者类或方法),而不能直接是一个变量,如数字,字符串之类的ci
截止2016.08.02,全部浏览器均还不支持原生模块化字符串
Node.js 6以上
ES6模块加载的机制,与CommonJS模块彻底不一样。CommonJS模块输出的是一个值的拷贝,而ES6模块输出的是值的引用。
CommonJS模块输出的是被输出值的拷贝,也就是说,一旦输出一个值,模块内部的变化就影响不到这个值。
ES6模块的运行机制与CommonJS不同,它遇到模块加载命令import时,不会去执行模块,而是只生成一个动态的只读引用。等到真的须要用到时,再到模块里面去取值,换句话说,ES6的输入有点像Unix系统的“符号链接”,原始值变了,import输入的值也会跟着变。所以,ES6模块是动态引用,而且不会缓存值,模块里面的变量绑定其所在的模块。
// circleplus.js export * from 'circle'; export var e = 2.71828182846; export default function(x) { return Math.exp(x); }
export *
命令会忽略模块的default方法
循环引用
// a.js var b = require('b'); // b.js var a = require('a');