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; 这将是提供给任何其他模块中的代码

+1

哇,你还没有使用* global *这个词,但这就是'window._hiddenVariable2' **全局变量**! – 2012-02-04 08:08:24

+1

这并没有解决这个问题 – rossipedia 2012-02-04 08:09:01

+0

是的!你是对的。如果你不使用var,它会变成全局变量 – 2012-02-04 08:09:54