Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Какая область видимости в данном случае?
Форумы портала PHP.SU » Клиентская разработка » JavaScript & VBScript » Какая область видимости в данном случае?

Страниц (1): [1]
 

1. Contr - 11 Октября, 2013 - 16:18:50 - перейти к сообщению
Какая область видимости у переменной var node?
Спойлер (Отобразить)
Спойлер (Отобразить)

Переменная node для каждого li своя.
Мучает 2й вопрос: не перезаписывается ли она, если кликать на div.Expand и div.Content, входящие в один li?
2. IllusionMH - 11 Октября, 2013 - 16:31:29 - перейти к сообщению
Contr, видна только внутри обработчика и каждый раз своя.
3. Contr - 11 Октября, 2013 - 16:44:41 - перейти к сообщению
Где посмотреть в firebug'е?
4. IllusionMH - 11 Октября, 2013 - 17:42:16 - перейти к сообщению
Contr, в любом отладчике.
5. Contr - 12 Октября, 2013 - 11:05:40 - перейти к сообщению
Так как я не услышал понятного ответа, повторю вопрос:
Какая область видимости у переменной node?
Как я понимаю, у переменной element область видимости ограничено телом функции tree. А область видимости node?
6. LIME - 12 Октября, 2013 - 11:10:27 - перейти к сообщению
Contr пишет:
Так как я не услышал понятного ответа
IllusionMH пишет:
видна только внутри обработчика и каждый раз своя.
создается при каждом вызове и видна только в ф-ции
так понятнее?
(Добавление)
Contr пишет:
Как я понимаю, у переменной element область видимости ограничено телом функции tree. А область видимости node?
точно так же
с какой стати ей быть другой?
7. Contr - 12 Октября, 2013 - 11:13:20 - перейти к сообщению
LIME пишет:
видна только в ф-ции

В какой?
(Добавление)
onclick - ограничивает область видимости или нет? onclick является функцией внутри tree ?
8. LIME - 12 Октября, 2013 - 11:20:15 - перейти к сообщению
element.onclick = function(event) {
вне ее она не видна
это очень просто проверить
alert(node) вне ф-ции
(Добавление)
Contr пишет:
onclick является функцией внутри tree ?
да
это так называемая функция-выражение
http://learn[dot]javascript[dot]ru/funct[dot][dot][dot]ation-expression
9. nerv - 12 Октября, 2013 - 14:57:43 - перейти к сообщению
код какой-то велосипедист писал - использует жуквери и колбасит по второму разу то, что уже реализовано в жуквери
10. MAXUS - 12 Октября, 2013 - 23:53:52 - перейти к сообщению
В javascript если переменная в функции объявляется с var, то ее область видимости оганичивается самой функцией и функциями, объявленными внутри нее. Соответственно, element будет видна в tree и в безымянной функции, повешенной на onclick, а node будет видна только внутри onclick-функции.
Но в сам вопрос поставлен не правильно. Функция на onclick объявлена не как объект, поэтому все переменные в ней живут только в момент ее выполнения и создаются каждый раз заново. Что присвоится node зависит только от того, насколько правильно там отработает if. Зачем было всю эту конструкцию вешать на конец загрузки документа и использовать для этого jquery не совсем ясно.
11. LIME - 13 Октября, 2013 - 11:00:57 - перейти к сообщению
MAXUS пишет:
Функция на onclick объявлена не как объект
а это как?
MAXUS пишет:
поэтому все переменные в ней живут только в момент ее выполнения и создаются каждый раз заново.
не все а только собственные...объявленные через var
внешние вполне себе неплохо живут и после
кстати 2 раза var это никуда не годится
MAXUS пишет:
Зачем было всю эту конструкцию вешать на конец загрузки документа
чтоб элементы уже существовали ... это кстати вполне понятно
12. MAXUS - 13 Октября, 2013 - 18:44:07 - перейти к сообщению
Цитата:
а это как?

Например,

CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. var obj = new function(){}
  3.  


Сформулировал я не правильно, факт. Имел в виду, если переменная не хранится в объекте или не является глобальной. Объект повесить на событие не получится.

Цитата:
внешние вполне себе неплохо живут и после

Ну да. Только они во вне и живутУлыбка

Цитата:
кстати 2 раза var это никуда не годится

Видимо, не ко мне.

MAXUS пишет:
Зачем было всю эту конструкцию вешать на конец загрузки документа
чтоб элементы уже существовали ... это кстати вполне понятно[/quote]

Дык. А в тэге повесить напрямую? Она повесится ровно, когда загрузится элемент.

CODE (html):
скопировать код в буфер обмена
  1. <div onclick="test()">клик</div>


Другой вопрос, если хочешь быть уверен, что функция уже загрузилась до того, как загрузился элемент. Но если функция не успела загрузиться, то просто onclick не отработает.
Кмк, познания в jquery отдаляют людей от понимания процессов. В итоге код просто усложняется.
(Добавление)
Цитата:
кстати 2 раза var это никуда не годится


А почему, кстати? Я так понимаю речь идет об такой конструкции:

CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. if(test==1) var node=1;
  3. else var node=2;
  4.  


Я в этом случае ничего страшного не вижу. Или что-то другое имелось в виду?
13. IllusionMH - 13 Октября, 2013 - 20:14:08 - перейти к сообщению
MAXUS, дальнейшее изменение кода может привести к созданию глобальных переменных. Объявление переменных в условии(не путать с присваиванием) плохая практика.Так что все еще актуально объявлять переменные вверху функции(все равно в данном случае код будет интерпретироваться как если бы var node была объявлена вначале функции).
14. MAXUS - 13 Октября, 2013 - 22:30:30 - перейти к сообщению
IllusionMH пишет:
MAXUS, дальнейшее изменение кода может привести к созданию глобальных переменных. Объявление переменных в условии(не путать с присваиванием) плохая практика.Так что все еще актуально объявлять переменные вверху функции(все равно в данном случае код будет интерпретироваться как если бы var node была объявлена вначале функции).


Насколько я понял, имеется в виду человеческий фактор?

CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. if(test==1) var node=1;
  3. else if(test==2) var node=2;
  4.  
  5. node=node+1;
  6.  


Что-нибудь типа такого? Если test==3, то переменная node станет глобальной? Если это имеется в виду, то согласен. От греха подальше, лучше объявить отдельно и до. Спасибо за пояснения.

 

Powered by ExBB FM 1.0 RC1