Где я могу объявить глобальные переменные JavaScript на веб-странице?

где мне нужно разместить фрагмент кода JavaScript, который инициализирует переменную, которая должна быть видимой для всего кода, выполняемого со страницей? (Например, обработчикам событий для элементов потребуется доступ к этой переменной).

5 ответов


вы можете сделать это из любой функции или в функции без использования ключевого слова var. Назначьте его перед любыми другими скриптами (вероятно, в верхней части страницы), чтобы скрипты могли прочитать значение.

вы также можете поместить его в включенный файл JS, но размещение его прямо на странице обычно более удобно, поскольку вы можете легко видеть глобальные значения, и они могут быть изменены для каждой страницы кодом на стороне сервера. Также попробуйте предотвратить назначение глобальных переменных в теле, это может сделать confussions и будет сложнее читать.

<head>
    <script>
        var numberOfDucks = 1000; // Global

        function some_function() {
            // numberOfDucks is accessible here
            alert (numberOfDucks);
            //  until you mask it by defining a local variable using the 'var' keyword
            var myLocal = 0; // is a local
            anotherGlobal = 0; // is a global
        }
    </script>

    <script>
        // potentially some other script
    </script>

    <script src="even_more_script.js">
</head>

определение глобального в функции (implied-global) не является хорошей идеей, потому что это сделает много путаницы.


на только способ не иметь глобальную переменную, чтобы использовать var ключевое слово в области функции. Все остальное-глобальная переменная.

(function() {
  var local = 5;
})();

не имеет значения, является ли функция литералом или определением функции, это и быть какой-то функцией.

примеры глобальных переменных:

1:

var global = 5; 

вышеуказанное не в функции объема, поэтому даже если это.

2.

(function() {
   global = 5;
})();

в вышеуказанном, нет var был использован, поэтому он становится подразумеваемым глобальным.

3.

function foo(){}

foo не был определен внутри другой функции или назначен объектному ключу, поэтому его глобально доступный.

4.

(function() {
   var local = global = 5;
})();

при выполнении нескольких заданий с var, только первая переменная становится местной... так что global глобальная переменная и составляет 5.

5.

window.foo = 5;

начинаются window. явный способ определения глобальной переменной в контексте браузера.

6.

this.x = 5;

по умолчанию в браузеры, this указывает на DOMWindow, если вы не находитесь в методе, который прикреплен к объекту, который не window. Это то же самое, что и № 5. Обратите внимание, что если вы используете метод XMLHttpRequest, контекст окна.

7.

with ( window ) { name = 'john'; }

если вы используете with оператор и вы не ссылаетесь на объект, который уже имеет свойство, определяется глобальная переменная. Лучше всего избегать использования with ключевое слово в генеральный.

вывод:

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

(function() {

   var governor = 'Schwarzenegger',
       state = 'California';

   window.president = 'Obama';
})();

в приведенном выше, я определяю governor и state переменные и они являются локальными для моей функции. Я хочу явно определить president как глобальная переменная. Таким образом, меня не смущает, какие переменные я определил как globals или нет, потому что я явно префикс их с window..


вы можете поместить эту переменную в начале страницы (в глобальной области, Если вам нужно было сделать ее видимой везде), но я предлагаю две вещи

1) поскольку вам нужно открыть блок скриптов, не объявляйте его внутри тела вашей страницы, так как сценарии блокируют рендеринг. Так что положите его прямо перед </head>

2) Избегайте создания простого var, но вместо этого используйте пространство имен, чтобы уменьшить риск столкновения идентификаторов

<script>
var YOUR_APP_NS = {};
YOUR_APP_NS.yourvar = ....
</script>

это хорошая практика чтобы не загрязнять глобальный охват. Если вам нужно несколько публичных var таким образом, вы можете просто написать

YOUR_APP_NS.yourvar1 = ....
YOUR_APP_NS.yourvar2 = ....
YOUR_APP_NS.yourvarN = ....

но глобальный var по-прежнему 1


объявите переменную вне любой из ваших функций, таким образом, она станет глобальной переменной.

вот пример глобальной переменной. Первая функция использует глобальную, но вторая функция использует локальную переменную с тем же именем, которое маскирует глобальную.

var globalVar = 1;

function testFunc1 () {
    globalVar = 2; //Updates the global variable
}

function testFunc2 () {
    var globalVar = 5; // This variable masks the global and only updates within the scope of this function
    globalVar = 3;
}

кроме того, вы упомянули, что фрагмент должен инициализировать глобальный перед любой другой ссылкой. Для этого я бы предложил вам разместить блок скрипта или ссылку на ваш файл javascript перед любыми другими ссылками javascript в вашем элементе, насколько это возможно. Если у вас есть другие файлы javascript, которые будут полагаться на глобальную переменную, вы можете убедиться, что они не загружаются, пока остальная часть страницы не загрузится сначала с помощью атрибута defer. См. следующее:

<script src="dependant.js" type="text/javascript" defer="defer"></script>

другой вариант-динамически добавлять зависимые скрипты после загрузки исходного скрипта. Вы можете сделать это, используя что-то вроде jQuery, как показано ниже:

$(window).load( function() {
    $.getScript('dependant.js');
});

<head>
<script>
    var b = 0;
</script>
<script src="...">
</head>
<body>
    ...
</body>