• js-ES6学习笔记-module(1)


    1、在 ES6 之前,社区制定了一些模块加载方案,最主要的有 CommonJS 和 AMD 两种。前者用于服务器,后者用于浏览器。ES6 在语言标准的层面上,实现了模块功能,而且实现得相当简单,完全可以取代 CommonJS 和 AMD 规范,成为浏览器和服务器通用的模块解决方案。

    2、ES6 可以在编译时就完成模块加载,效率要比 CommonJS 模块的加载方式高。当然,这也导致了没法引用 ES6 模块本身,因为它不是对象。

    3、除了静态加载带来的各种好处,ES6 模块还有以下好处。

    • 不再需要UMD模块格式了,将来服务器和浏览器都会支持 ES6 模块格式。目前,通过各种工具库,其实已经做到了这一点。
    • 将来浏览器的新 API 就能用模块格式提供,不再必须做成全局变量或者navigator对象的属性。
    • 不再需要对象作为命名空间(比如Math对象),未来这些功能可以通过模块提供。

     4、ES6 的模块自动采用严格模式,不管你有没有在模块头部加上"use strict";

    • arguments不会自动反映函数参数的变化
    • 不能使用arguments.callee
    • 不能使用arguments.caller
    • 禁止this指向全局对象

    ES6 模块之中,顶层的this指向undefined,即不应该在顶层代码使用this

    5、模块功能主要由两个命令构成:exportimportexport命令用于规定模块的对外接口,import命令用于输入其他模块提供的功能。

    6、一个模块就是一个独立的文件。该文件内部的所有变量,外部无法获取。如果你希望外部能够读取模块内部的某个变量,就必须使用export关键字输出该变量。

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

    export命令除了输出变量,还可以输出函数或类(class)。

    7、通常情况下,export输出的变量就是本来的名字,但是可以使用as关键字重命名

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

    8、export语句输出的接口,与其对应的值是动态绑定关系,即通过该接口,可以取到模块内部实时的值。这一点与 CommonJS 规范完全不同。CommonJS 模块输出的是值的缓存,不存在动态更新。

  • 相关阅读:
    新建项目
    Pandas常用操作
    Codeforces Round #764 (Div. 3)(CF1624)题解
    求1到n在模mod意义下的逆元
    [IOI2000] 回文字串 / [蓝桥杯 2016 省] 密码脱落(dp)
    持续集成:Jenkins Pipeline共享库定义和使用
    持续集成:Jenkins API使用方法详细介绍
    持续集成:Jenkins Pipeline语法介绍
    持续集成:Jenkins邮件通知配置方法介绍
    使用facebookwda进行iOS APP自动化测试
  • 原文地址:https://www.cnblogs.com/zczhangcui/p/6555944.html
Copyright © 2020-2023  润新知