pet*_*haw 4 javascript factory anonymous-function
我试图了解这种JavaScript模式是如何工作的,它是用括号括起来的整个库。我的理解是,括号是确定变量范围的一种方法,但是内部是一个采用参数(全局,工厂)的函数。
我尝试搜索此模式的工作原理,但找不到任何东西。
代码体返回一个可以在其他地方使用的对象,但是我不明白参数的目的global和factory完成的目的。
我一直在阅读有关附件和匿名函数的信息,但是找不到关于这样定义的附件的任何信息。
(function (global, factory) {
global.className = factory();
} (this, function () {
ObjectName.prototype = function() {
/* some code */
}
var data = {
getUsefulData: function(obj) {
return new ObjectName(obj, 'usefuldata');
}
}
return data;
})
);
Run Code Online (Sandbox Code Playgroud)
问题:
您将看到带有两个参数的IIFE(立即调用函数表达式)。考虑以下示例:
const x = (function(a, b) { return a + b; })(5, 6); // x === 11
Run Code Online (Sandbox Code Playgroud)
参数global被分配的参数this(其中,当在顶层使用,是到达的一个普遍的方式全局对象,window对于浏览器和global用于Node.js的),第二个参数factory被分配大(第二)功能。
然后,IIFE将factory函数的结果(实际上是库代码)放在className键(在此模式下也称为名称空间)下的全局对象上。
这是“显示模块模式”的一种变体,只有从factory函数返回的内容才会放置在上global.className,从而使您可以拥有“私有”变量和函数,这些变量和函数不会公开,但仍可供“公共”对象访问。
(function(global, factory) {
global.myModule = factory();
}(this, function() {
const privateMessage = 'secret';
function secret() {
return privateMessage;
}
function open() {
return 'Message: ' + secret();
}
return { open };
}));
window.myModule.open(); // Message: secret
// no way to directly access privateMessage or secret().
Run Code Online (Sandbox Code Playgroud)