可能重复:
Is it possible to gain access to the closure of a function?
请查看此代码:http://jsfiddle.net/FH6pB/1/
(function($) {
var o1 = {
init: function() { alert('1'); },
}
var o2 = {
init: function() { alert('2'); },
}
}(jQuery));
(function($) {
var o3 = {
init: function() { alert('3'); },
}
o2.init();
}(jQuery));
o1.init();
o2.init();
我在2个不同的“范围”中有3个对象(我不知道在这里使用它是否是正确的词,但我想你理解其含义)。
您可能知道,我无法从外部或其他“范围”访问对象的功能(o.init();
的非功能)。
为什么会这样?有没有办法改变它?
我知道我可以把代码放在一个范围内并且它会运行良好,但是如果我将范围放在单独的JS文件中会怎么样?
先谢谢了, 本
答案 0 :(得分:1)
不,您无法从外部访问闭包中声明的变量。这就是关闭工作的方式。
一个(通常很糟糕的)解决方案是将变量声明为全局变量:
(function($) {
window.o2 = {
init: function() { alert('2'); },
};
}(jQuery));
o2.init();
但通常,模块模式用于私有一些变量,只返回有用的变量。请参阅this article。
答案 1 :(得分:1)
您可以使用类名称空间:
var scope = {};
(function($) {
scope.o1 = {
init: function() { alert('1'); },
}
scope.o2 = {
init: function() { alert('2'); },
}
}(jQuery));
(function($) {
scope.o3 = {
init: function() { alert('3'); },
}
scope.o2.init();
}(jQuery));
scope.o1.init();
scope.o2.init();