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. 给大家推荐一个C#下文件监听器和资源管理器的示例Demo-含源码

    C#下文件监听器和资源管理器的示例Demo:源码下载地址

  2. Windows10下使用python+selenium实现谷歌浏览器的自动控制

    第一 谷歌浏览器一直是开发人员最喜欢的浏览器,python爬虫在进行抓包时尤其好用,今天为大家带来python+selenium进行自动化控制的安装教程 安装selenium windows下在cmd ...

  3. Python这么强大, 怎样才能快速入坑?

    作为一种年轻的编程语言,Python为何能在短短几年的时间内就以迅雷不及掩耳之势驰骋编程界?答案很简单,在人工智能时代,AlphaGo 都在使用的 Python语言,是最接近 AI 的编程语言. 随着 ...

  4. redis学习(四)——Hash数据类型

    一.概述 我们可以将Redis中的Hash类型看成具有String Key和String Value的map容器.所以该类型非常适合于存储值对象的信息.如Username.Password和Age等. ...

  5. object detection[NMS]

    非极大抑制,是在对象检测中用的较为频繁的方法,当在一个对象区域,框出了很多框,那么如下图: 上图来自这里 目的就是为了在这些框中找到最适合的那个框.有以下几种方式: 1 nms 2 soft-nms ...

  6. .net core实践系列之SSO-跨域实现

    前言 接着上篇的<.net core实践系列之SSO-同域实现>,这次来聊聊SSO跨域的实现方式.这次虽说是.net core实践,但是核心点使用jquery居多. 建议看这篇文章的朋友可 ...

  7. Ubuntu Desktop: 备份与还原

    Ubuntu Desktop 版本默认自带了图形化的备份/还原工具 Déjà Dup.该工具主要用来备份和还原用户的数据,当然我们也可以用它来备份/还原系统的数据.本文主要介绍 Déjà Dup 的主 ...

  8. OSGI嵌入tomcat应用服务器(gem-web)——资源下载

    Gem-Web官网介绍: 官网地址:https://www.eclipse.org/gemini/web/download/milestones.php 1.1. 官方正式发布版 https://ww ...

  9. Linux命令(一)

    需要用Xshell连接Linux时: 先在终端输入命令:service  sshd  start(开启ssh服务) 1.netstat -tnl:查看端口状态的命令(如 查看22端口) 2.servi ...

  10. Dockerfile centos7_tomcat7.0.64_jdk7u80

    FROM centos:7 MAINTAINER jiangzhehao WORKDIR /tmp RUN yum -y install net-tools ADD jdk-7u80-linux-x6 ...