我有一个案例,在自动执行的匿名函数中定义变量。我想将它们暴露给全局空间,以便在匿名函数返回后使用foo
和bar
。
(function () {
var foo = 123;
var bar = function () { /* ... */ };
})();
一个问题是,我不能简单地window.foo = 123
或SomeExistingGlobalObject.foo = 123
来公开它,因为我不知道预先在匿名函数中发生了什么。函数内部是动态生成的。
我尝试从该函数返回另一个自执行函数,但这也不起作用。这可能吗?
答案 0 :(得分:3)
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
答案 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);
您也可以使用私人方法。