如何在两个闭包之间共享数据,而不需要全局公开



我设置了两个封闭的作用域,其中一个依赖于另一个。通常,我会通过将数据(在本例中是带有原型的函数)公开到全局作用域来共享数据,如下所示:

(function(){
    var thing;
    /* ... */
    window.thing = thing;
}());

:

(function(){
    /* I now have access to 'thing' */
}());

是否有一种模式可以共享数据而不将其暴露给整个窗口?

这只能通过使两个闭包本身成为另一个闭包的子作用域,并使共享数据成为父闭包中的局部变量来实现:

(function() {
    var thing = 'foo';
    (function f1() {
        // thing is accessible here
        ...
    })();
    (function f2() {
        // and here!
        ...
    })();
})();

注意:闭包是一个词法构造,这意味着两个函数必须都在同一个源单元内。

@Alnitak已经为你的问题提供了一个很好的解决方案。

但是扩展你的例子,你也可以这样做:

(function (xyz) {
      var thing = "foo";
      xyz.thing = thing;
}(closure1 = {}));

然后你可以获取:

(function(){
    /* I now have access to 'thing' */
    alert(closure1.thing);
}());

最新更新