Чтобы ответить на ваш вопрос, нет, это невозможно, так как нет никаких модификаторов доступа в JavaScript. Переменная, объявленная в глобальной области видимости, доступна для любой функции.
Как указано в комментариях к этому ответу, вы можете создавать объекты с частными членами. У Крокфорда есть страница на private members in Javascript. Он использует следующий код, чтобы проиллюстрировать свою точку зрения:
function Container(param) {
// private method
function dec() {
if (secret > 0) {
secret -= 1;
return true;
} else {
return false;
}
}
this.member = param;
var secret = 3;
var that = this;
// privileged method
this.service = function() {
return dec() ? that.member : null;
};
}
В приведенном выше примере, параметры, секретные, и что все частные в том, что они не доступны извне. Чтобы быть более понятным, к этим переменным можно обращаться только привилегированные или частные методы, причем разница в том, что привилегированные методы могут быть вызваны из любого экземпляра объекта. Как предлагается в комментариях, это можно сделать, используя закрытие.
Цитата из Crockford для быстрого пояснения о закрытии, но вы можете найти много related questions.
Что это означает, что внутренняя функция всегда имеет доступ к переменных и параметров его внешней функции, даже после того, как внешняя функция возвратила.
Что вы подразумеваете под «частными глобальными переменными»? Не могли бы вы привести пример? –
это как сказать «глобальные переменные, которые не являются глобальными»? – Joseph
Возможно, вы захотите прочитать о ближайших функциях: http://stackoverflow.com/questions/8475578/what-is-the-reason-for-this-javascript-immediate-invocation-pattern –