如何将匿名函数中定义的局部变量暴露给全局空间?

时间:2014-10-15 10:42:04

标签: javascript

我有一个案例,在自动执行的匿名函数中定义变量。我想将它们暴露给全局空间,以便在匿名函数返回后使用foobar

(function () {
    var foo = 123;
    var bar = function () { /* ... */ };
})();

一个问题是,我不能简单地window.foo = 123SomeExistingGlobalObject.foo = 123来公开它,因为我不知道预先在匿名函数中发生了什么。函数内部是动态生成的。

我尝试从该函数返回另一个自执行函数,但这也不起作用。这可能吗?

3 个答案:

答案 0 :(得分:3)

使用revealing module pattern

var module = (function () {
  var foo = 123;
  var bar = function () {
    console.log('Hallo');
  };
  return { foo: foo, bar: bar }
})();

console.log(module.foo); // 123
module.bar(); // Hallo

DEMO

答案 1 :(得分:1)

作为@Andy的替代语法,你也可以去

var module = (function () {
  var fnpublic = {};
  var fubar = 123;

  fnpublic.foo = 123;
  fnpublic.bar = function () {
    console.log('Hallo');
  };

  return fnpublic;
})();

module.foo; // -> 123
module.bar(); // -> "hallo"
module.fubar; // -> undefined

答案 2 :(得分:-1)

其他优雅的方法是:

(function() {

  var that = this;   // Pass window global scope
  var private_1 = 1; // Create private variable

  // Create method to expose
  var method = function(number) {
    alert(number + private_1);
  };

  // Expose global_obj 
  that.global_obj = {
    alert: method
  };

 }.call(this));


 // In console now you may type
 global_obj.alert(5);

您也可以使用私人方法。