如何将匿名函数中定义的局部变量公开到全局空间
How can I expose local variables defined in anonymous function to the global space?
我有一个例子,其中变量是在自执行匿名函数中定义的。我想将它们公开到全局空间,以便在匿名函数返回后使用foo
和bar
。
(function () {
var foo = 123;
var bar = function () { /* ... */ };
})();
一个问题是,我不能简单地使用window.foo = 123
或SomeExistingGlobalObject.foo = 123
来公开它,因为我事先不知道匿名函数内部有什么内容。函数内部的内容是动态生成的。
我尝试从该函数返回另一个自执行函数,但也不起作用。这可能吗?
使用揭示模块模式:
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
作为@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);
您也可以使用私有方法。
相关文章:
- Javascript用函数return替换局部变量
- 每次调用函数时,都要修改Javascript中的局部变量
- 局部变量在闭包中丢失
- 试图将一个局部变量传递给我的ngAside控制器
- jQuery.ajax()访问javascript循环中的beforeEnd局部变量
- 如何使用局部变量创建全局变量
- 如何在单击链接后将局部变量发送到部分呈现
- 定义 JavaScript 类的局部变量
- 创建所有原型函数均可访问的局部变量
- 局部变量的声明
- JavaScript:在调用之前将函数重新分配给局部变量,而不是直接调用并对'这'
- 为什么 Javascript 中的类变量在尝试多次调用它们或将它们分配给局部变量时会消失
- 函数中的局部变量
- 局部变量仍可通过函数访问
- JavaScript和局部变量是不好的做法
- 局部变量在应用 function.call() 后变为全局变量
- 如何创建一个只应用了一些过滤器的局部变量
- 我可以't克服这个错误“;未定义的局部变量或方法`f'"任何原因
- 如何将匿名函数中定义的局部变量公开到全局空间
- JavaScript -将名称空间分配给局部变量以用于构造函数,但不确定发生了什么