IIFE 中的变量作用域

Variable scope inside IIFE

我是 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 变量作为私有数据存储保存在闭包中,那么您的 init() 函数应该直接引用它而不是引用 "App" 对象的 属性:

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

一旦你 运行 App.init()App.test 就会有一个值,因为你在这里声明它的值 App.test = 'test';。我猜您想将其保留为私有变量,因此您可能想这样做:

var App = (function() {

    var test = '';//this is private

    var init = function() {
        test = 'test';//private variable now!
    };

    return {
        init: init
    };

})();