HTML JavaScript Область применения переменной файла - PullRequest
6 голосов
/ 15 апреля 2009

Если я включаю файл JavaScript в свою HTML-страницу, имеют ли переменные, объявленные в моем файле JavaScript, область видимости в моих тегах <script /> на моей странице HTML? Например, в моем включенном файле JS я объявляю переменную:

var myVar = "test";

Тогда что будет на моей HTML-странице (если это будет после моего тега include script)?

alert(myVar);

Ответы [ 3 ]

15 голосов
/ 15 апреля 2009

Если вы объявите переменную вне какой-либо функции как

var myVar = 'test';

или в любом местоположении как

myVar = 'test';

или

window.myVar = 'test';

Он должен быть добавлен к Глобальному объекту (окну) и быть доступен в любом месте как

alert(myVar);

или

alert(window.myVar);

или

alert(window['myVar']);
3 голосов
/ 15 апреля 2009

Будет выдано предупреждение, содержащее «тест».

Все переменные, объявленные на верхнем уровне в JavaScript, имеют одинаковую область видимости. Если вы хотите использовать переменные в одном файле, которые не будут конфликтовать с другим, то вы можете использовать анонимную функцию, чтобы ввести новую область видимости:

var myVar = "something else";
(function () {var myVar = "test"; alert(myVar)})();
alert(myVar);

edit : Как указывает BYK, вы можете расширить его до чего-то, напоминающего полноценное пространство имен, назначив литерал объекта:

var MyNamespace = (function () {
  var myVar = "something";
  return { alert: function() { alert(myVar) },
           setVar: function(value) { myVar = value } }
})();
1 голос
/ 15 апреля 2009

Когда вы объявляете переменную или функцию в своем коде, вы создаете свойство window. Рассмотрим эти примеры:

var a = 'Cow';
alert(window.a); // Cow
alert(this.a); // Cow
alert(a); // Cow

Если вы объявите переменную внутри функции, ваша переменная не будет доступна извне, если вы не добавите ее в объект window:

function lalala() {
    alert(a); // still Cow
    a = 'Pig'; // We're tired of cows by now. Let's make it a pig.
    var b = 'Sheep';
}
lalala();
alert(a); // Pig
alert(b); // undefined, since b is declared in the lalala scope

Таким образом, ваш пример предупредит test.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...