import和require都是被模块化使用node
1. a. require是CommonJs的语法(AMD规范引入方式),CommonJs的模块是对象。es6
b. import是es6的一个语法标准(浏览器不支持,本质是使用node中的babel将es6转码为es5再执行,import会被转码为 require),es6模块不是对象浏览器
2. a. require是运行时加载整个模块(即模块中全部方法),生成一个对象,再从对象上读取它的方法(只有运行时才能获得这 个对象,不能在编译时作到静态化),理论上能够用在代码的任何地方babel
b. import是编译时调用,肯定模块的依赖关系,输入变量(es6模块不是对象,而是经过export命令指定输出代码,再经过 import输入,只加载import中导的方法,其余方法不加载),import具备提高效果,会提高到模块的头部(编译时执行)模块化
export和import能够位于模块中的任何位置,可是必须是在模块顶层,若是在其余做用域内,会报错函数
es6这样的设计能够提升编译器效率,但无法实现运行时加载ui
3. a. require是赋值过程,把require的结果(对象,数字,函数等),默认是export的一个对象,赋给某个变量(复制或浅拷贝)es5
b. import是解构过程(须要谁,加载谁)设计
写法:对象
1. require/exports(仅有下面的三种简单写法)
const a=require('a') //真正被require出来的是来自module.exports指向的内存块内容
exports.a=a //exports 只是 module.exports的引用,辅助module.exports操做内存中的数据
module.exports=a
2. import / export
import a from 'a'
import { default as a } from 'a'
import * as a from 'a'
import { fun1,fun2 } from 'a'
import { fun1 as myfunction } from 'a'
import a, { fun1 } from 'a'
---------------------------------------------------------
export default a
export const a=1
export functon a{ }
export { fun1,fun2 }
export * from 'a'---------------------