Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Глобальные и локальные переменные, правильная декларация переменных в JS 
:(
    Опции темы
Black
Дата 26.6.2005, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Web-Development
**


Профиль
Группа: Участник
Сообщений: 980
Регистрация: 15.8.2004

Репутация: 4
Всего: 45



Меня FireFox постоянно достает предупреждением:

Цитата
Предупреждение: assignment to undeclared variable Имя_переменной


Я так понял, что я неправильно объявляю глобальные переменные в функциях. Как же их правильно объявлять ???

Цитата
Область действия переменной определяется положением ее декларации в тексте программы. Для декларации глобальных переменных ключевое слово var не обязательно. Однако, оно обязательно при декларации локальных переменных.


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

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

Как же надо правильно дать ей (переменной) декларацию и сделать ее глобальной.
Добавлено @ 11:32
Я уже придумал ответ smile

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

И тогда FireFox не ругается.

P.S: пока писал вопрос, придумал на него ответ smile


--------------------
Могу все, но ничего не умею :-)
PM WWW   Вверх
Black
Дата 26.6.2005, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Web-Development
**


Профиль
Группа: Участник
Сообщений: 980
Регистрация: 15.8.2004

Репутация: 4
Всего: 45



Кстати, многие могут удивиться что меня FireFox стал доставать этим предупреждением.

По умолчанию в FireFox установлен мягкий режим проверки на корректность JavaScript

Чтобы установить строгий режим (который я и установил) необходимо в адресной строке набрать:
Цитата
about:config


Затем в поле фильтр ввести
Цитата
javascript.options.strict


и значение false поменять на true (меняется двойным щелчком по строке).

Вот, теперь строгий режим (strict).

Помните валидатор HTLM там тоже есть strict...


--------------------
Могу все, но ничего не умею :-)
PM WWW   Вверх
o.s.a.
Дата 26.6.2005, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Xo4y B MocKBy
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 16.2.2005
Где: Ташкент

Репутация: 5
Всего: 15



Любая переменная, где бы она ни находилась, объявленная БЕЗ var - является глобальной.
Переменная, объявленная с var в функции - локальная - доступна только в теле этой функции.
Переменная, объявленная с var не в функции (между тегами <script> </script>), доступна во всех функциях данного скрипта.

Возможно у тебя какая-то ошибка.
У меня тоже FireFox, но все работает нормально.



--------------------
Не могу стоять, пока другие работают, пойду полежу.
PM MAIL ICQ   Вверх
o.s.a.
Дата 26.6.2005, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Xo4y B MocKBy
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 16.2.2005
Где: Ташкент

Репутация: 5
Всего: 15



Да, включил строгий режим, у меня тоже пошли сообщения как у тебя.
Решения нашел такое: объявлять переменную в начале скрипта
Код

<script type="text/javascript">
var i;
function cc(){
i = 5;
}
function aa(){
document.writeln(i);
}
cc()
aa();
</script>



--------------------
Не могу стоять, пока другие работают, пойду полежу.
PM MAIL ICQ   Вверх
Black
Дата 26.6.2005, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Web-Development
**


Профиль
Группа: Участник
Сообщений: 980
Регистрация: 15.8.2004

Репутация: 4
Всего: 45



o.s.a.
Цитата
объявлять переменную в начале скрипта

я уже догадался об этом сразу после того как написал вопрос.




--------------------
Могу все, но ничего не умею :-)
PM WWW   Вверх
Aliance
Дата 26.6.2005, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Код

var a = "глобальная";

function q() {
   var aa = "локальная";
}

function qq() {
   aaa = "глобальная";
}


PM MAIL WWW ICQ Skype   Вверх
Black
Дата 26.6.2005, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Web-Development
**


Профиль
Группа: Участник
Сообщений: 980
Регистрация: 15.8.2004

Репутация: 4
Всего: 45



Aliance

Код

function qq() {
   aaa = "глобальная";
}


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

По мнению FireFox правильно так:

Код

var aaa;
function qq() {
   aaa = "глобальная";
}





--------------------
Могу все, но ничего не умею :-)
PM WWW   Вверх
Sardar
Дата 26.6.2005, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(PHP @ 26.6.2005, 16:45)
По мнению FireFox правильно так:

Угу, это правильно. Просто большинство браузеров поддерживают "грязный" кодинг, когда глобальные появляютья из "ниоткуда".

Кстати такой приём должен прокатить без ошибок, но тем не менее это грязный стиль:
Код
function qq() {
   window["aaa"] = "глобальная";
}

qq();
alert(aaa);



--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Black
Дата 26.6.2005, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Web-Development
**


Профиль
Группа: Участник
Сообщений: 980
Регистрация: 15.8.2004

Репутация: 4
Всего: 45



Sardar
да прокатило без ошибок.

Не знал, что так можно глобальные переменные создавать

Код

window["name"] = "cool";


Это сообщение отредактировал(а) PHP-DIRECTOR - 26.6.2005, 19:30


--------------------
Могу все, но ничего не умею :-)
PM WWW   Вверх
Aliance
Дата 29.6.2005, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Каждая переменная - это, грубо говоря, свойство объекта Window.
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2057 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.