JavaScript:是否可以访问私有变量(即哪些隐藏在闭包中)?
问题描述:
我已经实现了一个对象作为一个JavaScript关闭,一些方法是公开的,其他一些是私人的:JavaScript:是否可以访问私有变量(即哪些隐藏在闭包中)?
var MyObject = (function(){
function _hiddenMethod() {
/* Do something fancy here, such as reading data
from an external source and storing it in
_hiddenVariable2 */
}
var _hiddenVariable1 = 3;
var _hiddenVariable2 = undefined;
return {
publicMethod: function() {
_hiddenMethod();
return _hiddenVariable1;
};
};
})();
有没有一种方法,其中(熟练)用户可能可能读的_hiddenVariable2
内容?我假设它通过阅读JavaScript代码来知道它的存在。
答
没有办法,我知道的,但它可能依赖于JavaScript引擎。
也请记住,任何人都可以调试JavaScript,并注意每当_hiddenVariable2在封闭设置(写类似_hiddenVariable2 = 5 _hiddenMethod内,尝试开发工具镀铬,并插入一个断点到_hiddenMethod,会让你能够看到什么时候设置_hiddenVariable2)。
因此,熟练的用户可以知道它的当前值,例如,如果他在V8中调试代码。
答
声明为_hiddenVariable2 = undefined;
,而不是var _hiddenVariable2 = undefined;
这将是提供给任何其他模块中的代码
哇,你还没有使用* global *这个词,但这就是'window._hiddenVariable2' **全局变量**! – 2012-02-04 08:08:24
这并没有解决这个问题 – rossipedia 2012-02-04 08:09:01
是的!你是对的。如果你不使用var,它会变成全局变量 – 2012-02-04 08:09:54