Skip to content

模块化开发浅解 #10

@NextBoy

Description

@NextBoy

模块化的好处

  • 方便代码管理
  • 减少全局变量污染
  • 方便维护

立即调用表达式IIFE

// 创建一个立即调用的匿名函数表达式
// return一个变量,其中这个变量里包含你要暴露的东西
// 返回的这个变量将赋值给 module
var module = (function() {
  var num = 1;
  return {
    get: function () {
      return num;
    },
    set: function (value) {
      num = value;
    }
  }
})();

模块化规范

避免命名冲突,管理模块依赖

  • CommonJS
    • 同步加载模块,适用于node服务端,不适用于浏览器端
  • AMD异步模块定义
    • AMD 推崇依赖前置,在定义模块的时候就要声明其依赖的模块。
  • CMD通用模块定义
    • CMD 推崇依赖就近,只有在用到某个模块的时候再去 require 。

面向未来的 ES6 模块标准

既然模块化已经越来越重要,那么从语言层面上直接去解决这个问题就显得很有必要(况且其他语言早就有了)。于是 ES6 直接在语言标准的层面上,实现了模块功能,而且实现得相当简单,完全可以取代 CommonJS 和 AMD 规范,成为浏览器和服务器通用的模块解决方案。

设计思想

简单来说,ES6 模块的设计思想就是:一个 JS 文件就代表一个 JS 模块。在模块中你可以使用 import 和 export 关键字来导入或导出模块中的东西。

ES6 模块主要具备以下几个基本特点:

自动开启严格模式,即使你没有写 use strict
每个模块都有自己的上下文,每一个模块内声明的变量都是局部变量,不会污染全局作用域
模块中可以导入和导出各种类型的变量,如函数,对象,字符串,数字,布尔值,类等
每一个模块只加载一次,每一个 JS 只执行一次, 如果下次再去加载同目录下同文件,直接从内存中读取。 一个模块就是一个单例,或者说就是一个对象

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions