保护Java语言中的全局范围的方法

原始问题:

我正在研究js,我想知道这两种保护全局范围的方法之间是否有(有用的)区别,而不是第二种方法可以重用(再次调用).

选项1:

var question = {};
(function(){ 
    question.option1 = function() {
        // some code
    };
})();

选项2:

var question = {};
question.option2 = function () {
    //some code
};
question.option();

谢谢!

编辑1:

谢谢@luisperezphd.您编写的内容与此(除冗长程度之外)有什么区别吗?

var question = {};
question.option3 = {};
question.option3.privateVar = 0;
question.option3.testing = function () {
    question.option3.privateVar++;
    // some code
};
question.option3.testing();

编辑2:

谢谢lanston和luisperezphd!我没有意识到那个问题.option3.privateVar在全球范围内可用.

之间有什么区别:

var question = {};
(function(){
    var privateVar = "some value";
    question.option4 = function(){
        alert(privateVar);
    }
})();
question.option4();

和这个:

var question = {};
question.option5 = function() {
    var privateVar = "some value";
    var someFunction = function() { 
        alert(privateVar);
    }
    return someFunction;
}
question.option5()();

解决方法:

您提供的示例没有什么区别,但是您尚未利用的区别也没有.在第一个示例中,您可以利用变量而不污染全局名称空间或对象名称空间.等同于大多数面向对象的语言中的私有字段.您将这样做:

var question = {};
(function(){ 
    var PrivateVariable = 0;
    question.option1 = function() {
        PrivateVariable++;
        // some code
    };
})();

alert(question.PrivateVariable); // returns 'undefined'

上面的代码返回未定义的原因是因为PrivateVariable不是所讨论的字段.但是有问题的函数可以访问PrivateVariable.这确实是一个私有变量.

另一方面,如果您这样写:

var question = {};
question.PrivateVariable = 0;
question.option1 = function() {
    question.PrivateVariable++;
    // some code
};

alert(question.PrivateVariable); // returns 0

在第二种情况下,PrivateVariable实际上不是私有的,并且不能公开访问.

顺便说一句,您通常不会从属于您的问题的函数内部引用问题.相反,您将使用this关键字,如下所示:

var question = {};
question.PrivateVariable = 0;
question.option1 = function() {
    this.PrivateVariable++;
    // some code
};

但这仅适用于公共变量.它使事情更加清楚.同样,在某些情况下,这使得维护代码更加容易,因为如果您从问题中更改变量的名称,则无需在函数内部更改对其的引用.还有其他好处,但是我不知道是否应该在这里讨论.

上一篇:CloseableHttpClient方式配置代理服务器访问外网


下一篇:poj2485 highwaysC语言编写