一、es6模块化
1、es6中模块化自动设置为严格模式
a.变量和属性声明 :
(1)变量必须先声明后使用
(2)函数参数不能重名
b.this与顶层对象:
(1)this与window脱钩,模块外层this为undefined
c.函数内部变量
(1)不能使用fn.caller和fn.callee
(2)arguments不会自动反应函数参数的变化
d.不能使用with
(1)不能使用with,with会修改作用域链,太消耗性能
二、使用方法: export和import
除了指定接口,外界不能随意访问es6模块内容
1、export提供模块对外接口
export有两种导出方式:
(1)具名导出(次数不限)
声明变量时导出或者放在对象里导出
//具名导出
export let m = 123,n = 321; //also var,const;
export function test (){}
export class myClass{}
//结构对象导出
export const {name2:m}
//放在对象里并重命名导出
export {m as name1, n as name2, test, myClass}
(2)默认导出(仅有一次)
默认导出的设计思路是啥呢? 跟具名导出有啥区别?
默认导出的用法是引入时不用根据变量名进行解构,方便用户不用阅读文档就可以引入模块功能。这种用法在常见的js和ui框架引用中用到,用户不用去解构引入模块内部变量,直接使用’import name from … ‘即可完成模块引入。
let m = 123;
export default m
//默认导出常见使用场景
import Vue from 'vue';
import ElementUI from 'element-ui';
2、import
作用:引入模块。
(1)解构引入模块具体变量, 引入的时候也可以重命名
import {test as myFunc, data} from './index.js'
//此时引入的是模块具名导出的部分
(2)导入默认功能
import myModule from '../index.js'
//此时导入的是,模块的默认导出部分
(3)整体导入
import * as entireExportedModule from '../index.js'
//此时导入的是整个模块对象,有各个具名导出变量属性,还有default属性
// __esModule属性为true