JavaScript模块模式

作者: 不住海边也喜欢浪 | 来源:发表于2017-02-26 16:57 被阅读65次

一、什么模块模式

在JavaScript中没有包(Package)的概念,而面对日益庞大的JavaScript代码,而这正促使模块化开发的迫切需求,所以也就诞生了JavaScript的模块模式, 最早这么叫的是老道,他称之为 模块模式 (Module Patterns).

模块模式提供了用于创建独立解耦的代码片段的工具,这些代码可以被当成黑盒,当你正在写的软件需求发生变化时,这些代码可以被添加、替换、移除。

二、匿名闭包

这是一切成为可能的基础,也是JavaScript最好的特性。我们将简单的创建匿名函数,并立即执行。所有函数内部代码都在闭包(closure)内。它提供了整个应用生命周期的私有和状态。

(function () {
    // ... all vars and functions are in this scope only
    // still maintains access to all globals
}());

注意匿名函数周围的()。这是语言的要求。关键字function一般认为是函数声明,包括()就是函数表达式。

三、引入全局

JavaScript有个特性,称为隐性全局。使用变量名称时,解释器会从作用域向后寻找变量声明。如果没找到,变量会被假定入全局(以后可以全局调用)。如果会被分配使用,在还不存在时全局创建它。这意味着在匿名函数里使用全局变量很简单。不幸的是,这会导致代码难以管理,文件中不容易区分(对人而言)哪个变量是全局的。

幸好,匿名函数还有一个不错的选择。全局变量作为参数传递给匿名函数。将它们引入我们的代码中,既更清晰,又比使用隐性全局更快。下面是一个例子:

(function ($, YAHOO) {
    // 当前域有权限访问全局jQuery($)和YAHOO
}(jQuery, YAHOO));

四、模块出口

有时你不只想用全局变量,但你需要先声明他们(模块的全局调用)。我们用匿名函数的返回值,很容易输出他们。这样做就完成了基本的模块模式。以下是一个完整例子:

var MODULE = (function () {
var my = {},
privateVariable = 1;

function privateMethod() {
    // ...
}

my.moduleProperty = 1;
my.moduleMethod = function () {
    // ...
};

return my;
}());

注意,我们声明了一个全局模块MODULE,有两个公开属性:方法MODULE.moduleMethod和属性MODULE.moduleProperty。而且,匿名函数的闭包还维持了私有内部状态。同时学会之上的内容,我们就很容易引入需要的全局变量,和输出到全局变量。

相关文章

  • JavaScript 模块

    模块 【示例】: 【解释】: 这个模式在 JavaScript 中被称为模块。最常见的实现模块模式的方法通常被称为...

  • JavaScript模块模式

    一、什么模块模式 在JavaScript中没有包(Package)的概念,而面对日益庞大的JavaScript代码...

  • javascript模块模式

    当一个javascript文件很大的时候,会出现一些问题:1.里面定义了大量的变量,你不得不把变量的名字写的越来越...

  • JavaScript模块模式

    转自:http://www.oschina.net/translate/javascript-module-pat...

  • javascript模块模式

    先来看一段代码 foo函数包含了两个变量和两个函数,这里没有明显的闭包。这两个内部函数的词法作用域就是函数foo的...

  • Es6 模块 export、export default 、im

    说到模块这里我们要说下javascript严格模式。 ES6的模块自动采用严格模式,不管你有没有在模块头部加上"u...

  • H5-2.25Javascript模块模式

    从javascript对象创建说起说起Module(模块)模式,可能一些刚刚接触javascript的同学还是觉得...

  • 初涉 JavaScript 模块模式

    什么是模块模式   在JavaScript中没有包(Package)的概念,而面对日益庞大的JavaScript代...

  • 阮一峰 关于JavaScript的模块化笔记

    JavaScript实现模块化的方法: 宽放大模式: var module = (function(mod){ ...

  • Javascript 设计模式 -- Module(模块)模式

    1 . 公有方法改变私有变量 :Module 模式使用闭包封装"私有" 状态和组织.它提供了一中包装混合公有/私有...

网友评论

    本文标题:JavaScript模块模式

    本文链接:https://www.haomeiwen.com/subject/dsnowttx.html