javascript - IIFE 中的变量作用域

标签 javascript module-pattern

我是 JS 的新手。如果这个问题太天真了,请原谅我。

我正在使用这样的 IIFE:

var App = (function() {

    var test = '';

    var init = function() {
        App.test = 'test';
    };

    return {
        init: init
    };

})();

如果我不返回它,为什么 App.test 会暴露?我以为只有返回的变量会被公开(比如 App.init)。另外,我如何设置 App.test 的值而不暴露它?

通过公开它,我的意思是可以在 IIFE 之外访问(即:浏览器的控制台)

提前致谢!

最佳答案

您的 App.test 属性与该匿名函数中的局部变量 test 不同。它只是您调用 App.init() 时创建的 App 对象的一个​​属性。

在任何对象上,代码通常可以随意创建属性,所以你也可以做类似的事情

App.favoriteColor = "blue";

现在,如果您要做的是将 test 变量作为私有(private)数据存储保存在闭包中,那么您的 init() 函数应该只是直接引用它而不是引用“App”对象的属性:

var init = function() {
  test = 'test';
}

关于javascript - IIFE 中的变量作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29800726/

相关文章:

javascript - 使用 hljs 库在 React 中动态突出显示代码

javascript - 在 Nuxt.js 中检测服务器端渲染

javascript - 使用 session MVC

JavaScript 设计模式 : how to create sub-module and access parent module private vars and functions

模块模式中的 JavaScript 命名空间

javascript - 如何使用 JSDoc3 注释 JS 模块模式类?

JavaScript 模块模式/组织/子模块

javascript - 如何制作可点击的过渡条形图以在 d3 v4 中显示 3 个图形?

javascript - 我如何专业地构建我的模块模式 Javascript 项目?

javascript - 获取另一个变量的数据 react