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
的数组来获取模块的属性。啊,我理解您现在遇到的问题。不,不可能。这些变量是该函数的局部变量。如果你不能改变它,你基本上被卡住了。是的,这正是我的问题。不过还是谢谢你的回答。