Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Область видимости переменной Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
Mechanic



Зарегистрирован: 10.06.2008
Сообщения: 359

СообщениеДобавлено: Пн Янв 07, 2013 7:47 pm Ответить с цитатой Вернуться к началу

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

Код:

1.   function SomeFunc()
2.   {
3.       A = 0;
4.
5.       for(i = 0; i < BarCount; i++)
6.           A[i] = ...;   //что-то считаем
7.     
8.      return A;
9.   }
10. 
11.  for(i = 0; i < 10; i++)
12.  {
13.      SomeFunc();
14.      // здесь i == BarCount-1 на первой же итерации!!!
15.  }


После вызова функции в строке 13 значение i становится равным BarCount-1, т.е. эта переменная является глобальной и меняется из любой функции, из любого участка кода! А что, ограничить её область видимости функцией или логическим блоком никак? Rolling Eyes
Посмотреть профиль Отправить личное сообщение ICQ Number
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пн Янв 07, 2013 10:06 pm Ответить с цитатой Вернуться к началу

Если переменная декларируется не в функции, то она глобальная.
Набери в поиске хелпера global Keyword Там нормально описано.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Mechanic



Зарегистрирован: 10.06.2008
Сообщения: 359

СообщениеДобавлено: Пн Янв 07, 2013 10:52 pm Ответить с цитатой Вернуться к началу

Спасибо. Оказывается, надо просто в функции объявить i с ключевым словом local. Не знал о нём.
Посмотреть профиль Отправить личное сообщение ICQ Number
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen