Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将匿名函数中定义的局部变量公开到全局空间?_Javascript - Fatal编程技术网

Javascript 如何将匿名函数中定义的局部变量公开到全局空间?

Javascript 如何将匿名函数中定义的局部变量公开到全局空间?,javascript,Javascript,我有一个例子,变量是在一个自动执行的匿名函数中定义的。我想将它们暴露在全局空间中,以便在匿名函数返回后使用foo和bar (function () { var foo = 123; var bar = function () { /* ... */ }; })(); 一个问题是,我不能简单地做window.foo=123或SomeExistingGlobalObject.foo=123来公开它,因为我事先不知道匿名函数中包含什么。函数中的内容是动态生成的 我尝试从该函数返回另一

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

(function () {
    var foo = 123;
    var bar = function () { /* ... */ };
})();
一个问题是,我不能简单地做
window.foo=123
SomeExistingGlobalObject.foo=123
来公开它,因为我事先不知道匿名函数中包含什么。函数中的内容是动态生成的

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

使用:

使用:


作为@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

作为@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

另一种优雅的方式是:

(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);

您也可以使用私有方法。

其他优雅的方法是:

(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);

您可能也有私有方法。

是否尝试在匿名函数中使用参数我也无法在函数中放置参数。如果没有,这是不可能的。它们是该函数的本地参数。您是否尝试在匿名函数中使用参数?我也无法在函数中放置参数。那么,否。这是不可能的。它们是该函数的本地函数。谢谢,但这需要我知道函数中存在foo和bar。我甚至不知道该函数中变量的编号或名称。如果需要,您可以使用
Object.keys(module)
-一个包含元素
foo
bar
的数组来获取模块的属性。啊,我理解您现在遇到的问题。不,不可能。这些变量是该函数的局部变量。如果你不能改变它,你基本上被卡住了。是的,这正是我的问题。好的,还是谢谢你的回答。谢谢,但这需要我知道函数中存在foo和bar。我甚至不知道该函数中变量的编号或名称。如果需要,您可以使用
Object.keys(module)
-一个包含元素
foo
bar
的数组来获取模块的属性。啊,我理解您现在遇到的问题。不,不可能。这些变量是该函数的局部变量。如果你不能改变它,你基本上被卡住了。是的,这正是我的问题。不过还是谢谢你的回答。