gpt4 book ai didi

javascript - 分配给这个 javascript 工厂的参数是什么?

转载 作者:搜寻专家 更新时间:2023-11-01 05:27:22 26 4
gpt4 key购买 nike

我试图理解这个 JavaScript 模式是如何工作的——它是一个包含在括号中的整个库。我的理解是括号是一种限定变量范围的方法,但内部是一个接受参数(全局、工厂)的函数。

我尝试搜索此模式的工作原理,但找不到任何内容。

代码主体返回一个可以在别处使用的对象,但我不明白参数 globalfactory 完成的目的是什么。

我一直在阅读有关外壳和匿名函数的信息,但找不到任何关于这样定义的外壳的信息。

(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 - 分配给这个 javascript 工厂的参数是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55708860/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com