Possible Duplicate:
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 文件中有作用域怎么办?
提前致谢, 本
最佳答案
不,您不能从外部访问闭包中声明的变量。这就是闭包的工作原理。
一个(通常不好的)解决方案是将变量声明为全局变量:
(function($) {
window.o2 = {
init: function() { alert('2'); },
};
}(jQuery));
o2.init();
但通常,模块模式用于将一些变量设为私有(private)并仅返回有用的变量。请参阅this article .
关于javascript - 从其他范围访问对象(javascript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14304952/