【问题标题】:Internal variable handling in self executing function自执行函数中的内部变量处理
【发布时间】:2026-01-23 19:40:02
【问题描述】:

我需要在我的命名空间中包含“私有”和“公共”成员的函数,并且想知道内部发生了什么,因为我无法追溯变量处理。

应直接分配公共变量“publicVar”,如:“myNamespace.publicVar = true”。

var myNamespace = (function() {
    var _privateVar = "not accessible",
        publicVar = false;

    function publicFoo() {
        if (publicVar) {
            console.log("var is true");
        } else {
            console.log("var is false");
        }
    }

    return {
        publicVar: publicVar,
        publicFoo: publicFoo
    }

})();

myNamespace.publicFoo();     // output--> var is false
myNamespace.publicVar = true;
myNamespace.publicFoo();     // output --> var is false
myNamespace.publicVar;       // output--> true of course.

这里发生了什么?为什么我不能以这种方式更改“公共”变量,以便在内部正确使用它? 如果我像这样更改 publicFoo() 并将 publicVar 与“this”一起使用,它可以正常工作:

    function publicFoo() {
        if (this.publicVar) {
            console.log("var is true");
        } else {
            console.log("var is false");
        }
    }

但是我可以避免“这个”吗?或者有没有更好的处理方式?

myNamespace.publicFoo();       // output --> var is false
myNamespace.publicVar = true;
myNamespace.publicFoo();       // output --> var is true

非常感谢您的回答。

【问题讨论】:

    标签: javascript this private public


    【解决方案1】:

    这是因为当你说,

    myNamespace.publicVar = true;

    它在myNamespace 对象上创建一个publicVar它不会更新函数内部的变量。

    publicVar 内部函数是本地的,它只对内部函数可见(图中的闭包)

    【讨论】: