JavaScript:是否可以访问私有变量(即隐藏在闭包中的变量)

JavaScript: is it possible to access private variables (i.e. which have been hidden inside a closure)?

本文关键字:变量 隐藏 闭包 JavaScript 是否 访问      更新时间:2023-09-26

我在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时注意(在_hiddenMethod中编写类似_hiddenVariable2=5的内容,尝试chrome的开发人员工具,并在_hidden Method中插入断点,您将能够看到设置_hidden Variable2的时间)。

因此,如果一个熟练的用户在V8中调试代码,他就可以知道它的当前值。

将其声明为_hiddenVariable2 = undefined;而不是var _hiddenVariable2 = undefined;它将可用于代码中的任何其他模块