Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Переменные. Переменная - это область памяти, имеющая свое имя и хранящая некоторые данные



Переменная - это область памяти, имеющая свое имя и хранящая некоторые данные. Переменные в JavaScript объявляются с помощью оператора var, при этом можно давать или не давать им начальные значения:

var k;var h='Привет!';

Можно объявлять сразу несколько переменных в одном операторе var (тем самым уменьшая размер кода), но тогда их надо писать через запятую. При этом тоже можно давать или не давать начальные значения:

var k, h='Привет!';var t=37, e=2.71828;

Тип переменной определяется по присвоенному ей значению. Язык JavaScript - слабо типизирован: в разных частях программы можно присваивать одной и той же переменной значения различных типов, и интерпретатор будет "на лету" менять тип переменной. Узнать тип переменной можно с помощью оператора typeof():

var i=5; alert(typeof(i));i= new Array(); alert(typeof(i));i= 3.14; alert(typeof(i));i= 'Привет!'; alert(typeof(i));i= window.open(); alert(typeof(i));

Переменная, объявленная оператором var вне функций, является глобальной - она "видна" всюду в скрипте. Переменная, объявленная оператором var внутри какой-либо функции, является локальной - она "видна" только в пределах этой функции. Подробнее о функциях будет рассказано в следующем разделе этой лекции.

Например, в следующем фрагменте ничего не будет выведено на экран, несмотря на то, что мы обращаемся к переменной kпосле описания функции, и даже после ее вызова:

function f(){ var k=5; } f(); alert(k);

Причина в том, что переменная k является локальной, и она существует только в процессе работы функции f(), а по окончании ее работы уничтожается.

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

var k=7; function f(){ var k=5; } f(); alert(k);

То же касается и аргументов при описании функций (с той лишь разницей, что перед ними не нужно ставить var): если имеется глобальная переменная k, и мы опишем функцию function f(k) {...}, то переменная k внутри {...} никак не связана с одноименной глобальной переменной. В этом плане JavaScript не отличается от других языков программирования.

Примечание. Объявлять переменные можно и без оператора var, просто присваивая переменной начальное значение. Так зачастую делают с переменными циклов. В следующем примере, даже если переменная i не была объявлена ранее, все будет работать корректно:

for(i=0; i<8; i++) {... }

Однако опускать var не рекомендуется. Во-первых, это нарушает ясность кода: если написано i=5, то непонятно, вводится ли здесь новая переменная или меняется значение старой. Во-вторых, и это главное, нужно помнить следующий момент, часто приводящий к неправильной работе программы.

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

function f(){ var i=5; k=7; } f(); alert(k);

В приведённом примере после i=5 стоит точка с запятой (а не запятая). Значит, k=7 - это отдельное объявление переменной, уже без оператора var. Поэтому переменная k "видна" снаружи и ее значение (7) будет выведено оператором alert (k). Чтобы скрыть переменную k, нужно было после i=5 поставить запятую.

Рассмотрим другой пример, показывающий, к каким неожиданным последствиям может привести отсутствие var при описании переменной:

function f(i){ k=7; if(i==3) k=5; else { f(3); alert(k); }}f(0);

Мы вызываем f(0), переменной присваивается значение k=7, далее выполнение функции идет по ветке else - и оператор alert (k) выдает 5 вместо ожидавшегося 7. Причина в том, что вызов f(3) в качестве " побочного эффекта " изменил значение k. Чтобы такого не произошло, нужно перед k=7 поставить var. Тогда переменная k будет локальной и вызовf(3) не сможет ее изменить, так как при вызове функции создаются новые копии всех ее локальных переменных.

При написании больших программ подобные ошибки трудно отследить, поэтому настоятельно рекомендуется все переменные объявлять с оператором var, особенно внутри функций.





Дата публикования: 2015-01-24; Прочитано: 431 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...