【问题标题】:What's the point of this JavaScript code structure?这个 JavaScript 代码结构有什么意义?
【发布时间】:2020-03-31 09:29:13
【问题描述】:

我找到了一个结构如下的代码:

(function() {
 function Usermanager(user) {
    ...
    ...
 // other properties
}
//prototype methods

// And then noticed this line:

window.Usermanager = Usermanager;

}()

这行不是替代旧语法中模块不可用的模块导出吗?

window.Usermanager = Usermanager;

如果是,那么在 IIFE 函数中添加它有什么意义,它提供了保持一切私密性的功能。

【问题讨论】:

  • 它封装了Usermanager创建,这很有帮助,因为它与代码的其他部分无关

标签: javascript javascript-objects ecmascript-5


【解决方案1】:

这行不是模块导出的替代品

不是真的。它在浏览器环境中创建一个全局变量。它远没有使用 CommonJS 模块那么可控。

如果是,那么在 IIFE 函数中添加它有什么意义,它提供了保持一切私密性的功能。

保持其他所有内容为私有并且只公开单个变量。

【讨论】:

  • 感谢您的回答。你这是什么意思?并且只公开单个变量? Usermanager 将在其他 JS 文件上工作,但不会访问其属性以修改其他文件?
  • @NewTechLover — 你用 cmets 替换了很多代码。据推测,该代码涉及变量的创建。它们不会是全局变量。
【解决方案2】:

它不等同于 es6 模块。 在过去,您知道我们没有私有变量,而且我们需要封装以使我们的代码更有效,因此我们从函数范围中受益并借用 IEFE 来做到这一点,所以让我向您展示它是如何实现的。这是一种使用 IEFE 进行封装的旧方法:

(function(win, doc){
   var _private = "private";
   win.public = "public";
})(window, document);

我希望这个小小的解释会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多