Module模式

匿名函数闭包
(function () {
        // ... all vars and functions are in this scope only
        // still maintains access to all globals
}());      
 
注意在匿名函数外面的括号。这是由于在JavaScript中以function开头的语句通常被认为是函数声明。
加上了外面的括号之后则创建的是函数表达式。
 
全局导入
JavaScript有一个特征叫做隐藏的全局变量。当一个变量名被使用,编译器会向上级查询用var来声明这个变量的语句。如果没有找到的话这个变量就被认为是全局的。如果在赋值的时候这样使用,就会创建一个全局的作用域。这意味着在一个匿名的闭包中创建一个全局变量是十分容易的。不幸的是 ,这将会导致代码的难以管理,因为对于程序员来说,如果全局的变量不是在一个文件中声明会很不清晰。幸运的是 ,匿名函数给我们另一个选择。我们可以将全局变量通过匿名函数的参数来导入到我们的代码中,这样更加的快速和整洁。
 
在Javascript中只有程序和函数才会创建新的作用域,if 语句之类的不会
 
(function ($, YAHOO) {
// now have access to globals jQuery (as $) and YAHOO in this code
}(jQuery, YAHOO));
 
Module导出
有时你并不想要使用全局变量,但是你想要声明他们。我们可以很容易通过匿名函数的返回值来导出他们。关于Module模式的基本内容就这么多,这里有一个复杂一点的例子。
 
var MODULE = (function () {
        var my = {},
                privateVariable = 1;

        function privateMethod() {
                // ...
        }

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

        return my;
}());
 
这里我们声明了一个全局的module叫做MODULE,有两个公有属性:一个叫做MODULE.moduleMethod的方法和一个叫做MODULE.moduleProperty的变量。另外他通过匿名函数的闭包来维持私有的内部状态,当然我们也可使用前面提到的模式,轻松导入所需的全局变量
原文地址:https://www.cnblogs.com/chuangweili/p/5162392.html