关于JavaScript中的模块模式

关于JavaScript中的模块模式,javascript,modularization,Javascript,Modularization,我刚刚读了一篇关于Java脚本中模块模式的代码项目的小文章。在阅读了javascript代码之后,很少有地方不太清楚代码的编写方式。我写了javascript,但我不熟悉如何提前编写javascript。下面是我从codeproject中读取的url 1) //生成用于添加数字的新函数的函数 function addGenerator(num) { // Return a simple function for adding two numbers // with the fir

我刚刚读了一篇关于Java脚本中模块模式的代码项目的小文章。在阅读了javascript代码之后,很少有地方不太清楚代码的编写方式。我写了javascript,但我不熟悉如何提前编写javascript。下面是我从codeproject中读取的url

1) //生成用于添加数字的新函数的函数

function addGenerator(num) {
    // Return a simple function for adding two numbers
    // with the first number borrowed from the generator
    return function (toAdd) {
        return num + toAdd
    };
}
// addFive now contains a function that takes one argument,
// adds five to it, and returns the resulting number
var addFive = addGenerator(5);
// We can see here that the result of the addFive function is 9,
// when passed an argument of 4
alert(addFive(4) == 9);   // Which return true
当addGenerator调用时,5已作为参数传递,但我不明白这行代码是如何工作的

return function (toAdd) {
        return num + toAdd
    };
什么addGenerator(5)将返回

这将如何返回true-->警报(addFive(4)==9);//哪个是真的

(二)

上面的代码将如何工作&将被调用?请详细说明他们想做什么

(三)

我只是不明白这一行。
(EmployeeModule | |{})
请解释一下这一行的意思

4) 模块模式中的全局导入

我们还可以在模块中导入其他java脚本库

(function ($, Y) {
    // now have access to globals jQuery (as $) and YAHOO (as Y) in this code
}(jQuery, YAHOO));

Sub-modules in Module Pattern
在许多情况下,我们可以创建子模块。这就像创建一个常规模块一样 折叠|复制代码

EmployeeModule.subModule = (function () {
    var my = {};
    // ...
    return my;
}());

寻找对上述代码的良好解释,并提供更多示例以获得更好的解释。谢谢

我不经常使用模块模式,因此我无法回答您关于此主题的所有问题。我想回答你关于
EmployeeModule | |{}

我认为不使用模块模式更容易理解在常规上下文中这意味着什么。考虑这个问题。

var foo=foo | |{}

这是检查
foo
是否已经存在。如果是这样,我们不会覆盖,我们只是将其设置为等于自身…如下所示:

var foo = {bar:'value'};
var foo = foo;
如果foo不存在,那么我们将创建一个新对象,如下所示:

var foo={}

因此,代码说“foo等于前一个foo(如果foo已经是某物)或一个新对象(如果foo还不是某物)”


在您的示例中,
EmployeeModule | |{}
作为名为
my
的参数传递到即时调用的函数表达式中。如果
EmployeeModule
是某种东西,则设置为
my
。如果
EmployeeModule
什么都不是,那么
my
的值就是一个新对象。

我认为,要完全理解所有这些代码,您需要知道的概念没有特定顺序:类型转换、短路运算符、立即调用函数表达式(IIFE)、闭包、高阶函数和部分应用程序。
EmployeeModule.subModule = (function () {
    var my = {};
    // ...
    return my;
}());
var foo = {bar:'value'};
var foo = foo;