Нет разницы в приведенном вами примере, но есть разница, которой вы не воспользовались.В первом примере вы можете использовать переменные и не загрязнять глобальное пространство имен или пространство имен объекта.Эквивалент частного поля в большинстве объектно-ориентированных языков.Вы можете сделать это так:
var question = {};
(function(){
var PrivateVariable = 0;
question.option1 = function() {
PrivateVariable++;
// some code
};
})();
alert(question.PrivateVariable); // returns 'undefined'
Причина, по которой код выше возвращает undefined
, заключается в том, что PrivateVariable
не является полем в question
.Но функции в question
могут получить доступ к PrivateVariable
.Это действительно частная переменная.
С другой стороны, если вы написали это так:
var question = {};
question.PrivateVariable = 0;
question.option1 = function() {
question.PrivateVariable++;
// some code
};
alert(question.PrivateVariable); // returns 0
Во втором случае PrivateVariable
на самом деле не является частным и общедоступным.
Кстати, вы обычно не будете ссылаться на question
внутри функции, которая относится к вашему вопросу.Вместо этого вы должны использовать ключевое слово this
, например:
var question = {};
question.PrivateVariable = 0;
question.option1 = function() {
this.PrivateVariable++;
// some code
};
Но это будет работать только с открытыми переменными.Это делает более понятным, что происходит.Кроме того, в некоторых случаях это облегчает ведение кода, так как если вы измените имя переменной с question
, вам не придется менять ссылки на нее внутри функции.Есть и другие преимущества, но я не знаю, стоит ли мне здесь это делать.