任何平台的其中一个重要特性,除了需要支持代码库外就是模块。直到现在,Javascript还不支持原生的模块化。结果是,各种解决方案都将模块添加到类库中,比如CommonJS modules(部分由node.js实现)和require.js。然而,作为下一代的Javascript(官方称为ECMAScript 6),模块终于被作为重要组成部分加入其中。Axel Rauschmayer写了一篇介绍ECMAScript 6模块的文章,解析了它们是什么以及如何使用,并且如果目前想使用的话采用的方法(使用转换编译器)。
Axel指出了ES6模块的设计目标如下:
ECMAScript 6 (ES6)模块的目标是创建的格式能让CJS(CommonJS规范)和AMD(Asynchronous Module Definition,异步模块定义)的用户都能满意。为此,它们的语法是CJS那样紧凑。在另一方面,它们的动态能力比不上CJS(例如,你不能用正常的语法去有条件加载模块)。这有两个主要的优点:

  • 如果尝试导入未导出的将会得到编译时的错误
  • 可以很容易异步导入ES6的模块。

ES6的模块标准由两部分组成:

  1. 声明式语法(导入和导出用)。
  2. 编程式API加载器:设置模块如何加载以及如何有条件地加载模块。

ES6模块不再需要开发人员去将整个JavaScript文件的尴尬地包装成一个对象或函数闭报,这和以前大多数异步模块装载器在浏览器中的做法一样。相反,可以在最顶层进行定义,而只有函数和显式定义的导出变量将可以暴露给模块的消费者:

var privateVar = "this is a variable private to the module";
export var publicVar = "and this one is public";

export function returnPrivateVar() {
   return privateVar;
};

假设将上面的代码保存在mymodule.js中,我们现在可以用两种方法导入,或者是通过导入指定函数和变量,或者通过导入模块作为模块的对象:

import { returnPrivateVar, publicVar } from 'mymodule';
console.log(returnPrivateVar());

或者是:

import 'mymodule' as mm;
console.log(mm.returnPrivateVar());

新的模块标准也支持对模块的内嵌定义和动态模块加载。可以阅读Axel的文章也了解更多相关信息。

ECMAScript 6 模块简介的更多相关文章

  1. Python::OS 模块 -- 简介

    OS 模块简介 OS模块是Python标准库中的一个用于访问操作系统功能的模块,OS模块提供了一种可移植的方法使用操作系统的功能.使用OS模块中提供的接口,可以实现跨平台访问.但是在OS模块中的接口并 ...

  2. Qt5模块简介

        原文链接:Qt5 模块简介 无意中看到这篇文章,虽然讲的不是经常用的东西,但是看了这篇文章之后,可以对qt有个大致的了解,能够清晰的知道自己想要什么,应该关注那一部分,学习了,相信以后会又很大 ...

  3. Python 的 six模块简介

    Python 的 six模块简介 six : Six is a Python 2 and 3 compatibility library Six没有托管在Github上,而是托管在了Bitbucket ...

  4. signal模块简介

    signal模块简介 最近在看Linux signal 相关内容,signal可以被用来进程间通信和异步处理.Python标准库提供了signal包可以用来处理信号相关.这里讨论的是Unix系统中Py ...

  5. socketserver模块简介

    1. socketserver模块简介 在python的socket编程中,实用socket模块的时候,是不能实现多个连接的,当然如果加入其 它的模块是可以的,例如select模块,在这里见到的介绍下 ...

  6. Qt 学习之路 2(6):Qt 模块简介

    Home / Qt 学习之路 2 / Qt 学习之路 2(6):Qt 模块简介  豆子  2012年8月26日  Qt 学习之路 2  20条评论 Qt 5 与 Qt 4 最大的一个区别之一是底层架构 ...

  7. Python logging 模块简介

    Table of Contents 1. Logging 模块 1.1. 简介 1.2. 简单输出日志 1.3. 输入日志到文件 1.4. 几个基本概念 1.4.1. loggers 1.4.2. h ...

  8. collections模块简介

    collections模块简介 除python提供的内置数据类型(int.float.str.list.tuple.dict)外,collections模块还提供了其他数据类型,使用如下功能需先导入c ...

  9. python从入门到大神---Python的jieba模块简介

    python从入门到大神---Python的jieba模块简介 一.总结 一句话总结: jieba包是分词技术,也就是将一句话分成多个词,有多种分词模型可选 1.分词模块包一般有哪些分词模式(比如py ...

随机推荐

  1. IOS 多个ImageView图片层叠透明区域点击事件穿透

    经常用到多个透明图片层叠,但又需要获取不同图片的点击事件,本文实现图片透明区域穿透点击事件 实现人体各个部位点击 - (BOOL) pointInside:(CGPoint)point withEve ...

  2. 小白学phoneGap《构建跨平台APP:phoneGap移动应用实战》连载四(使用程序载入事件)

    在了解了PhoneGap中都有哪些事件之后,本节将開始对这些事件的使用方法进行具体地介绍.本节要介绍的是程序载入事件,也就是deviceready.pause和resume这3个事件. [范例4-2 ...

  3. LeetCode201 Bitwise AND of Numbers Range Java 题解

    题目: Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all num ...

  4. [RxJS] Filtering operators: skipWhile and skipUntil

    After takeUntil() and takeWhile() function, let's have a look on skipWhile() and skilUntil() functio ...

  5. mysqldump备份数据库时出现when using LOCK TABLES

    用mysqldump备份数据库时,如果出现when using LOCK TABLES,解决办法是加上 --skip-lock-tables 例如: 用mysqldump备份数据库时出现 29: Fi ...

  6. Map 迭代 两种方法

    Map 迭代 两种方法 Map<String, String> map=new HashMap<String,String>(); map.put("1", ...

  7. eclipse删除空行

    1.打开源码编辑器 2.使用快捷键Ctrl+f 3.在Find输入框中输入:^\s*\n 4.Replace With输入框的值为空 5.在[Options]选中的"Regular expr ...

  8. Oracle修改被占用的临时表结构

    这两天在修改临时表的类型时,提示”attempt to create,alter or drop an index on temporary table already in use“的错误,由于临时 ...

  9. html px em pt长度单位(像素 相对长度 点)知识(转)

    html px em pt单位区 一.PX\EM\PT单位介绍 px单位名称为像素,相对长度单位,像素(px)是相对于显示器屏幕分辨率而言的国内推荐:em单位名称为相对长度单位.相对于当前对象内文本的 ...

  10. 安卓工程修改包名后 Failed to find provider info for...问题

    安卓工程修改包名后 Failed to find provider info for com.android...provider问题 原因: 1. 多处含包名文件须同时更改 2. Manifest里 ...