Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 04.05.2009, 14:55
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Потому что i, в данном случае, глобальная.
Ответить с цитированием
  #22 (permalink)  
Старый 04.05.2009, 15:32
Профессор
Отправить личное сообщение для AzriMan Посмотреть профиль Найти все сообщения от AzriMan
 
Регистрация: 27.02.2009
Сообщений: 215

хм. такой пример:
<html><head>
<script type="text/javascript">
var a=5;
for (var i=0;i<5;i++)
{var a=4; alert (''+a+i);}
alert('!'+a+i);
</script>
</head><body></body></html>

i, теоретически, должна быть видима в пределах цикла. но последним выводом будет "!45". все равно не пойму..
Ответить с цитированием
  #23 (permalink)  
Старый 04.05.2009, 15:52
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от AzriMan
i, теоретически, должна быть видима в пределах цикла
С теорией C/C++ путаете.
Ответить с цитированием
  #24 (permalink)  
Старый 04.05.2009, 16:16
Профессор
Отправить личное сообщение для AzriMan Посмотреть профиль Найти все сообщения от AzriMan
 
Регистрация: 27.02.2009
Сообщений: 215

Сообщение от Kolyaj Посмотреть сообщение
С теорией C/C++ путаете.
хм. вполне может быть, потому что в теорию JS не вникал. требуемый код писал интуитивно, даже не читая книжек. при возникновении вопросов искал ответы в разных манах/примерах (раздел аналогов функций PHP на JS помогал-некоторые вопросы отпадали после изучения примеров).

но, я думаю, всё встало на свои места. раз i в этом случае глобальная, следовательно var a, созданный в цикле, тоже будет глобальным. следовательно, созданный ранее var a=5; будет затерт ноым глобальным значением. вот и ответ.

буду знать, что в JS, все-таки, есть некие отличия от C/C++ в области видимости. спасибо.
Ответить с цитированием
  #25 (permalink)  
Старый 04.05.2009, 23:46
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

потому что есть 3 типа исполняемого кода: глобальный, функция и eval. Объявление переменных происходит перед выполнением, а присваивание - во время и не важно, что переменная объявлена в for:
alert(a); // если бы не было var a, то здесь бы выполнение прекратилось - ошибка
for( var i=0; i<1; i++ ) {
    var a=4; // значение присваивается здесь
}
alert(a);

вроде так
Ответить с цитированием
  #26 (permalink)  
Старый 04.05.2009, 23:53
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от x-yuri
Объявление переменных происходит перед выполнением
В начале скопа.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск