这个 javascript 工厂分配给的参数是什么?
What are the arguments to this javascript factory assigned to?
我想了解这个 JavaScript 模式是如何工作的,它是用括号括起来的整个库。我的理解是圆括号是一种限定变量范围的方法,但里面是一个接受参数 (global, factory) 的函数。
我尝试搜索此模式的工作原理,但找不到任何内容。
代码主体returns一个可以在别处使用的对象,但我不明白参数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;
})
);
问题:
- 如果外部函数没有参数会发生什么?
- 此处为全局变量和变量分配了什么值?
您看到的是一个带有两个参数的 IIFE (an Immediately Invoked Function Expression)。考虑这个例子:
const x = (function(a, b) { return a + b; })(5, 6); // x === 11
参数 global
被分配了 this
的参数(当在顶层使用时,这是达到 global object, window
for browsers and global
for Node.js 的通用方式),第二个参数 factory
被分配了大(第二)功能。
IIFE 然后将 factory
函数的结果(实际上是库代码)放入 className
键下的全局对象(在该模式中也称为命名空间)。
这是 Revealing Module Pattern 的变体,只有从 factory
函数返回的内容会放在 global.className
上,让您拥有 "private" 变量和函数不会公开,但 "public" 对象仍然可以访问。
(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().
我想了解这个 JavaScript 模式是如何工作的,它是用括号括起来的整个库。我的理解是圆括号是一种限定变量范围的方法,但里面是一个接受参数 (global, factory) 的函数。
我尝试搜索此模式的工作原理,但找不到任何内容。
代码主体returns一个可以在别处使用的对象,但我不明白参数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;
})
);
问题:
- 如果外部函数没有参数会发生什么?
- 此处为全局变量和变量分配了什么值?
您看到的是一个带有两个参数的 IIFE (an Immediately Invoked Function Expression)。考虑这个例子:
const x = (function(a, b) { return a + b; })(5, 6); // x === 11
参数 global
被分配了 this
的参数(当在顶层使用时,这是达到 global object, window
for browsers and global
for Node.js 的通用方式),第二个参数 factory
被分配了大(第二)功能。
IIFE 然后将 factory
函数的结果(实际上是库代码)放入 className
键下的全局对象(在该模式中也称为命名空间)。
这是 Revealing Module Pattern 的变体,只有从 factory
函数返回的内容会放在 global.className
上,让您拥有 "private" 变量和函数不会公开,但 "public" 对象仍然可以访问。
(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().