Как сделать переменную глобальной

Добавил пользователь Skiper
Обновлено: 05.10.2024

Переменные в Javascript бывают глобальными и локальными. Глобальная переменная доступна везде, локальная — только в текущей области видимости.

Технически, глобальные переменные — всего лишь свойства объекта window , поскольку весь код выполняется в его контексте.

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

Объявление переменных

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

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

Явно объявлять переменные можно и нужно ключевым словом var .

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

Как объявить глобальную переменную из функции? Как обратиться к глобальной переменной, если есть локальная с таким же именем? Очень просто — нужно обратиться к ней как к свойству window :

Наследование области видимости

Меня всегда смущало то, что в Javascript можно определять функции внутри функций, а использовать их потом где угодно. Ну да, если посмотреть, точно то же самое можно делать в Ruby, и, наверное, во многих других языках тоже.

Переменные при этом передаются очень просто: если на момент определения функции переменная существовала, то она будет существовать и внутри функции. Откуда бы ее не вызывали.

Передача кода по старинке — строкой, которая прогоняется через eval() — не попадает под это правило, код исполняется в той области видимости, где и определен.

Поскольку объекты в Javascript — это тоже типа функции, то свойство объекта определяется точно так же, как и переменная.

А еще в Javascript область видимости переменной ограничивается только функциями, а не блоками типа if (привет, Паскаль). Потому удобнее всего объявлять переменные в начале функции.

А что this ? А то, что эта переменная автоматически появляется в методах объектов и затирает значение this из предыдущей области видимости. Решение простое — переприсваивать ее значение другой переменной.

Отдельно замечу, что при оборачивании какой-то поведенческой логики в объект надо помнить, что в создаваемых DOM-событиях значение this самого объекта теряется.

Область видимости определяет доступность (видимость) переменных.

В JavaScript существует два типа области видимости:

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

Локальные переменные JavaScript

Переменные, декларированные внутри JavaScript функции, становятся ЛОКАЛЬНЫМИ по отношению к этой функции.

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

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

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

Глобальные переменные JavaScript

Переменные, декларированные за пределами JavaScript функций, становятся ГЛОБАЛЬНЫМИ.

У глобальных переменных глобальная область видимости: все скрипты и функции на данной веб-странице могут получить к ним доступ.

Внимание! В JavaScript объекты и функции также являются переменными.

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

Автоматическая глобальная область видимости

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

В следующем примере декларируется глобальная переменная carName, хотя значение ей присваивается внутри функции:

"Строгий" режим

Все современные браузеры поддерживают работу JavaScript в, так называемом, "строгом режиме".

В следующих главах данного учебника будет подробнее рассказано о том, что такое "строгий режим" и как его использовать.

В "строгом режиме" глобальные переменные не создаются автоматически.

Глобальные переменные в HTML

Для JavaScript глобальной областью видимости является все окружение JavaScript.

В HTML глобальная область видимости это окно браузера (объект window). Все глобальные переменные принадлежат объекту window.

Предупреждение

Не создавайте глобальные переменные, если в этом нет жесткой необходимости.

Ваши глобальные переменные (или функции) могут переписывать переменные (или функции) глобального объекта window. В свою очередь любая функция, включая объект window, может переписывать ваши глобальные переменные и функции.

Жизненный цикл переменных JavaScript

Жизненный цикл переменной JavaScript начинается во время ее декларирования.

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

Глобальные переменные в браузере прекращают свое существование, когда вы закрываете окно браузера (или вкладку страницы), однако они остаются доступными, если в то же окно загружается новая веб-страница.

Аргументы функций

Аргументы (параметры) функции работают как локальные переменные внутри функции.


2 ответа 2

Основная ошибка -- если начали использовать объекты, то откажитесь от идеи использовать статичность и глобальность. Когда разберётесь с объектами, то поймёте где иногда нужна статичность. Так, что убирайте static из ваших классов (как оно вообще скомпилировалось?)

Вторая ошибка -- области видимости, у переменных они есть свои у каждой.

У переменной auto область видимости < car95 auto = new car95(mode, 50); >и всё! Не ранее, не позднее к ней не обратиться. Можно 1 , т.к. форма на которой у вас кнопка button1 это тоже объект, завести поле в форме.

Обратите внимание, что для auto я поставил тип car , а не car95 или иной. В этом третья ваша ошибка -- нельзя для одной переменной или поля назначить три разных типа. Но если все предполагаемые типы наследуются от одного общего, то можно назначить тип предка.

Ну и нельзя не упомянуть:

Реализация на форме логики, несвязанной с UI (интерфейс пользователя), не рекомендуется. Лучше отделять логику приложения от работы с UI. Хабрахабр. Паттерны для новичков: MVC vs MVP vs MVVM

Публичные поля тоже не рекомендуется использовать, когда разберётесь используйте публичные свойства вместо них. Для чего нужны свойства?


В этой статье пойдет разговор о том, что такое глобальные переменные в PHP и чем они отличаются от локальных. Также читатель узнает о том, как использовать ассоциативный массив $GLOBALS вместо ключевого слова Global. Пояснения будут даны на конкретных примерах.

В языке программирования PHP существует понятие глобальных переменных (globally variables). Но для начала следует вспомнить о переменных локальных. Последние определены внутри пользовательской функции (внутри подпрограммы), причем на нее вы сможете ссылаться лишь в этой функции. Таким образом, локальная variable доступна лишь внутри той функции, в которой она определена (доступна в локальной области видимости).

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

Для языка программирования PHP все переменные, которые объявлены и задействуются в функции, локальны для функции (так обстоят дела по умолчанию). Таким образом, по дефолту возможность поменять значение переменной global в теле функции отсутствует.

Давайте представим, что мы в теле пользовательской функции PHP захотим применить переменную с именем, причем это имя будет идентично имени глобальной переменной, которая находится вне user function. В результате никакого отношения данная локальная variable к глобальной иметь не будет. В описанном только что случае в пользовательской функции будет создана local variable, причем с именем в PHP, которое будет идентично имени global variable, однако доступна такая переменная будет лишь внутри нашей пользовательской функции.

Все вышеописанное лучше пояснить на примере:


Сценарий кода выведет сначала 555, а потом 888. Чтобы избавиться от недостатка, продемонстрированного в function test (это не ошибка, а именно недостаток), в языке программирования PHP предусмотрена особая инструкция global. Эта инструкция дает возможность пользовательской функции взаимодействовать с глобальными переменными.

Рассмотрим этот принцип на очередном примере:


Скрипт с function sum выведет результат 15. Что тут произошло? После того, как $x и $y были определены внутри нашей функции в качестве global, все существующие ссылки на любую из этих статических переменных стали указывать уже на их глобальную версию. При данных обстоятельствах отсутствуют какие-либо ограничения на количество global variables, доступных к обработке с помощью user functions.

PHP и глобальные переменные. Массив $GLOBALS

Есть и другой способ, обеспечивающий доступ к глобальной области видимости. Он заключается в применении специального массива , определяемого PHP. Мы можем переписать предыдущий пример иначе, задействовав $GLOBALS:

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

Ниже расположен пример, который демонстрирует возможности использования суперглобальных переменных:

Читайте также: