es 6 大幅度优化了模块化编程的规范。

写在前面:在 es6 之前,说起 js 的模块化,一般都避不开 CommonJs 和 AMD 两种方案。这两种方案,前者应用于服务器,后者应用于浏览器。而 es 6 通过 export 和 import 这两个关键字,完全取代上面两种方案,且使用起来更简单。

一、export 命令

  出口,用于规定模块的对外接口(这就意味着数据必须被包装成对象的格式)。

  一个模块就是一个独立的文件,该文件内部的所有变量,外部无法获取。如果希望能获取到内部的某个变量,就必须使用 export 将变量输出:

// profile.js
export var firstName = 'Michael';
export var lastName = 'Jackson';
export var year = 1958;

  通常写成,也建议这样写:

// profile.js
var firstName = 'Michael';
var lastName = 'Jackson';
var year = 1958; export {firstName, lastName, year};

  以及输出函数或者类:

function v1() { ... }
function v2() { ... } export {
v1 as streamV1,
v2 as streamV2,
v2 as streamLatestVersion
};

  export 输出时,只有三种固定格式,其他均会报错:

// 写法一
export var m = 1; // 声明时输出 // 写法二
var m = 1;
export {m}; // 包装成数据对象输出 // 写法三
var n = 1;
export {n as m}; // 使用别名输出,基本上相当于第二种 // 报错
export 1; // 报错
var m = 1;
export m;

  还有一点就是,export 输出的接口,与其对应的值是动态绑定关系,即通过接口,可以获取到模块内部实时的值:

export var foo = 'bar';
setTimeout(() => foo = 'xyz', 500); // 输出变量 foo, 值为 bar , 500 ms 后变成 xyz

二、import 命令

  入口,加载 export 的模块中的变量、方法等。

// main.js
import {firstName, lastName, year} from './profile.js'; function setName(element) {
element.textContent = firstName + ' ' + lastName;
}

  当然,引入的变量也可以修改变量名:

import { lastName as surname } from './profile.js';

  一个规范:import 进来的变量、方法、对象本身无法修改,但是,如果是对象的话,其中的某个属性还是可以修改的,但但是,从规范上,不要进行任何修改,将引入的全部当做只读,否则改 bug 会很头疼。

  如果 export 时未采用 {xxx,xxx} 方式,那么在 import 时,想要引入所有值,可以使用 * 来代替:

// main.js

import { area, circumference } from './circle';

console.log('圆面积:' + area(4));
console.log('圆周长:' + circumference(14)); // 可以简写成
import * as circle from './circle'; console.log('圆面积:' + circle.area(4));
console.log('圆周长:' + circle.circumference(14));

三、export default 命令

  使用 import 的时候会有一个问题,如果不知道需要加载的模块中的变量名或者函数名,那就很尴尬。小模块没什么,点进去翻翻就知道,但是像 Vue、ElementUI 这种框架的时候,想要快速上手,先去翻翻文档?

// export-default.js
export default function () {
console.log('foo');
} // import-default.js
import customName from './export-default';
customName(); // 'foo'

  如上例所示,通过 export default 出来的通常在 import 时候不需要 {},且 import 时可以任意命名。

ES 6 系列 - Module 的语法的更多相关文章

  1. 20.Module 的语法

    Module 的语法 Module 的语法 概述 历史上,JavaScript 一直没有模块(module)体系,无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来.其他语言都有这项功能, ...

  2. ES6的新特性(19)——Module 的语法

    Module 的语法 概述 历史上,JavaScript 一直没有模块(module)体系,无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来.其他语言都有这项功能,比如 Ruby 的re ...

  3. es6从零学习(五):Module的语法

    es6从零学习(五):Module的语法 ES6 模块的设计思想,是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量 一:es6模块化和 CommonJS 和 AMD 模块 (运行 ...

  4. 【03】emmet系列之CSS语法

    [01]emmet系列之基础介绍 [02]emmet系列之HTML语法 [03]emmet系列之CSS语法 [04]emmet系列之编辑器 [05]emmet系列之各种缩写   单位: 有几个常用值别 ...

  5. 【02】emmet系列之HTML语法

    [01]emmet系列之基础介绍 [02]emmet系列之HTML语法 [03]emmet系列之CSS语法 [04]emmet系列之编辑器 [05]emmet系列之各种缩写 初始化 :快速编写HTML ...

  6. OpenGL ES教程系列(经典合集)

    为了搞透播放器的开发,花了些时间收集这些资料,虽然我已经搞定opengles渲染视频的内容,但是想玩玩opengles,往深里玩,图像处理这块是个好的方向,所以opengles是值得好好学的.   O ...

  7. openresty开发系列15--lua基础语法4表table和运算符

    openresty开发系列15--lua基础语法4表table和运算符 lua中的表table 一)table (表)Table 类型实现了一种抽象的"关联数组".即可用作数组,也 ...

  8. openresty开发系列14--lua基础语法3函数

    openresty开发系列14--lua基础语法3函数 一)function (函数) 有名函数: optional_function_scope function function_name( ar ...

  9. openresty开发系列13--lua基础语法2常用数据类型介绍

    openresty开发系列13--lua基础语法2常用数据类型介绍 一)boolean(布尔)布尔类型,可选值 true/false: Lua 中 nil 和 false 为"假" ...

随机推荐

  1. Luogu2398 GCD SUM

    Luogu2398 GCD SUM 求 \(\displaystyle\sum_{i=1}^n\sum_{j=1}^n\gcd(i,j)\) \(n\leq10^5\) 数论 先常规化式子(大雾 \[ ...

  2. 小米路由器Mesh,信号有多牛?

    导读 现如今随着居住面积的增加,以前可能住在一室一厅,如今二室一厅.三室一厅都有相对应的户型,有的小伙伴甚至住上了越层,这些户型对于路由器来说非常吃力的,毕竟单台路由器的覆盖范围有限.可能大多数人会在 ...

  3. Python脱产8期 Day11 2019/4/25

    一 字符串比较 1.字符串比较:字符串对应的ascii进行比较 2.多个字符的字符串进行比较:从前往后逐个字符进行比较,一旦哪个位置的字符出现了大小关系就结束比较. 二 形参与实参 1.参数介绍: 函 ...

  4. [MicroPython]TPYBoardv102播放音乐实例

    0x00前言 前段时间看到TPYBoard的技术交流群(群号:157816561,)里有人问关于TPYBoard播放音乐的问题.最近抽空看了一下文档介绍,着手做了个实验.更多MicroPython的教 ...

  5. IIS7启动优化

    最近基于abp做的项目在发布到IIS后,第一次被访问异常缓慢,如果时间间隔久再去访问如第一次访问一般缓慢,为了解决这个问题对项目进行了一下系列操作: 1.优化js.css插件,插件分批加载,充分利用浏 ...

  6. 广师大python学习笔记求派的值

    用python语言算π值并且带有进度条 用python算圆周率π 1.准备第三方库pip 2.利用马青公式求π 3.用python语言编写出求圆周率到任意位的程序如下: from math impor ...

  7. ML.NET 示例:推荐之One Class 矩阵分解

    写在前面 准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正. 如果有朋友对此感兴趣,可以加入我:https://github.com/fei ...

  8. Windows Community Toolkit 4.0 - DataGrid - Part02

    概述 在上面一篇 Windows Community Toolkit 4.0 - DataGrid - Part01 中,我们针对 DataGrid 控件的 CollectionView 部分做了详细 ...

  9. AndroidManifest.xml文件解析

    一.关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件.它位于整个项目的根目录,描述了package中暴露的组件(activiti ...

  10. 解决object at 0x01DB75F0

    python在学习过程中吗,由于常常会出现代码运行没报错,但输出的却不是我们想要的结果(图表,列表等等),而出现类似 <filter object at 0x01DB75F0>的情况,比如 ...