一、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)具名导出(次数不限)
    声明变量时导出或者放在对象里导出

    1. //具名导出
    2. export let m = 123,n = 321; //also var,const;
    3. export function test (){}
    4. export class myClass{}
    5. //结构对象导出
    6. export const {name2:m}
    7. //放在对象里并重命名导出
    8. export {m as name1, n as name2, test, myClass}

    (2)默认导出(仅有一次)
    默认导出的设计思路是啥呢? 跟具名导出有啥区别?
    默认导出的用法是引入时不用根据变量名进行解构方便用户不用阅读文档就可以引入模块功能。这种用法在常见的js和ui框架引用中用到,用户不用去解构引入模块内部变量,直接使用’import name from … ‘即可完成模块引入。

    1. let m = 123;
    2. export default m
    3. //默认导出常见使用场景
    4. import Vue from 'vue';
    5. import ElementUI from 'element-ui';

    2、import
    作用:引入模块。
    (1)解构引入模块具体变量, 引入的时候也可以重命名

    1. import {test as myFunc, data} from './index.js'
    2. //此时引入的是模块具名导出的部分
    1. 2)导入默认功能
    1. import myModule from '../index.js'
    2. //此时导入的是,模块的默认导出部分
    1. 3)整体导入
    1. import * as entireExportedModule from '../index.js'
    2. //此时导入的是整个模块对象,有各个具名导出变量属性,还有default属性
    3. // __esModule属性为true

    image.png