Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Компактное дерево (https://javascript.ru/forum/dom-window/3421-kompaktnoe-derevo.html)

Kolyaj 04.05.2009 14:55

Потому что i, в данном случае, глобальная.

AzriMan 04.05.2009 15:32

хм. такой пример:
<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". все равно не пойму..

Kolyaj 04.05.2009 15:52

Цитата:

Сообщение от AzriMan
i, теоретически, должна быть видима в пределах цикла

С теорией C/C++ путаете.

AzriMan 04.05.2009 16:16

Цитата:

Сообщение от Kolyaj (Сообщение 18189)
С теорией C/C++ путаете.

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

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

буду знать, что в JS, все-таки, есть некие отличия от C/C++ в области видимости. спасибо.

x-yuri 04.05.2009 23:46

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

вроде так

Kolyaj 04.05.2009 23:53

Цитата:

Сообщение от x-yuri
Объявление переменных происходит перед выполнением

В начале скопа.


Часовой пояс GMT +3, время: 04:47.