Заголовок переменной в вашем примере объявлен как глобальная переменная, поэтому он будет доступен для всех без исключения скриптов, загруженных на одну и ту же страницу.Более того, если на той же странице уже есть глобальная переменная с именем title
, ее значение будет перезаписано при назначении ей значения «Hello World!»
Обычная практика, позволяющая избежать подобных проблем.это объявить ровно одну глобальную переменную, а затем поместить в нее все остальные переменные.Например:
var bobbyS_vars = {
title: "Hello World!";
};
Назначьте этой единственной глобальной переменной имя, которое никто другой не выберет, например, ваше имя или имя работодателя или, что лучше всего, доменное имя, которое принадлежит вам или вашемуEmployer.
Другой, более распространенный способ решения этой проблемы - воспользоваться преимуществами способа, которым JavaScript обрабатывает переменную область видимости в функциях.Например, создайте анонимную функцию, объявите all вашего кода внутри этой функции, затем вызовите функцию в конце объявления, поставив () в конце объявления.Например:
(function() {
var title = "Hello World!";
document.write(title);
})();
// title is not in scope here, so it is undefined,
// unless it were declared elsewhere.
Если вы хотите, чтобы совместно использовали некоторые переменные, но не другие, попросите вашу анонимную функцию использовать комбинацию подходов:
var bobbyS_vars = {
title: "Hello World!";
};
(function() {
var employeeId = "E 298";
var count = 7;
document.write("<p>" + bobbyS_vars.title + "</p>");
document.write("<p>" + employeeId + "</p>");
})();
// At this point, bobbyS_var.title is in scope and still has the
// value "Hello World!". Variables employeeId and count are not
// in scope and effectively private to the code above.
Oneпоследнее замечаниеВсе функции, которые объявляет ваш код, также являются глобальными переменными.Таким образом, если вы создаете функцию с именем printTitle, она 1) доступна для всего другого кода на странице и 2) может быть перезаписана или перезаписана другой функцией на той же странице, также называемой printTitle.Вы можете защитить и / или предоставить свои функции так же, как и любую другую переменную:
var bobbyS_vars = { };
(function() {
// Private functions
var function = addOne(i) {
return i + 1;
};
// Public vars
bobbyS_vars.title: "Hello World!";
// Public functions
bobbyS_vars.printTitle = function() {
document.write("<p>" + bobbyS_vars.title + "</p>");
document.write("<p>" + addOne(41) + "</p>");
};
})();
// At this point, function addOne is not directly accessible,
// but printTitle is.
bobbyS_vars.printTitle();
Обратите внимание, что, хотя функция addOne фактически является закрытой функцией в замыкании, она по-прежнему доступна косвенно через printTitleфункция, потому что addOne и printTitle находятся в одной области видимости.