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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Какая область видимости в данном случае?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Contr
Отправлено: 11 Октября, 2013 - 16:18:50
Post Id



Частый гость


Покинул форум
Сообщений всего: 202
Дата рег-ции: Окт. 2011  
Откуда: с Марса


Помог: 1 раз(а)




Какая область видимости у переменной var node?
Спойлер (Отобразить)
Спойлер (Отобразить)

Переменная node для каждого li своя.
Мучает 2й вопрос: не перезаписывается ли она, если кликать на div.Expand и div.Content, входящие в один li?
 
 Top
IllusionMH
Отправлено: 11 Октября, 2013 - 16:31:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




Contr, видна только внутри обработчика и каждый раз своя.
 
 Top
Contr
Отправлено: 11 Октября, 2013 - 16:44:41
Post Id



Частый гость


Покинул форум
Сообщений всего: 202
Дата рег-ции: Окт. 2011  
Откуда: с Марса


Помог: 1 раз(а)




Где посмотреть в firebug'е?
 
 Top
IllusionMH
Отправлено: 11 Октября, 2013 - 17:42:16
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




Contr, в любом отладчике.
 
 Top
Contr
Отправлено: 12 Октября, 2013 - 11:05:40
Post Id



Частый гость


Покинул форум
Сообщений всего: 202
Дата рег-ции: Окт. 2011  
Откуда: с Марса


Помог: 1 раз(а)




Так как я не услышал понятного ответа, повторю вопрос:
Какая область видимости у переменной node?
Как я понимаю, у переменной element область видимости ограничено телом функции tree. А область видимости node?
 
 Top
LIME
Отправлено: 12 Октября, 2013 - 11:10:27
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Contr пишет:
Так как я не услышал понятного ответа
IllusionMH пишет:
видна только внутри обработчика и каждый раз своя.
создается при каждом вызове и видна только в ф-ции
так понятнее?
(Добавление)
Contr пишет:
Как я понимаю, у переменной element область видимости ограничено телом функции tree. А область видимости node?
точно так же
с какой стати ей быть другой?
 
 Top
Contr
Отправлено: 12 Октября, 2013 - 11:13:20
Post Id



Частый гость


Покинул форум
Сообщений всего: 202
Дата рег-ции: Окт. 2011  
Откуда: с Марса


Помог: 1 раз(а)




LIME пишет:
видна только в ф-ции

В какой?
(Добавление)
onclick - ограничивает область видимости или нет? onclick является функцией внутри tree ?
 
 Top
LIME
Отправлено: 12 Октября, 2013 - 11:20:15
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




element.onclick = function(event) {
вне ее она не видна
это очень просто проверить
alert(node) вне ф-ции
(Добавление)
Contr пишет:
onclick является функцией внутри tree ?
да
это так называемая функция-выражение
http://learn[dot]javascript[dot]ru/funct[dot][dot][dot]ation-expression
 
 Top
nerv
Отправлено: 12 Октября, 2013 - 14:57:43
Post Id



Посетитель


Покинул форум
Сообщений всего: 407
Дата рег-ции: Февр. 2013  
Откуда: Россия


Помог: 9 раз(а)




код какой-то велосипедист писал - использует жуквери и колбасит по второму разу то, что уже реализовано в жуквери


-----
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
 
 Top
MAXUS
Отправлено: 12 Октября, 2013 - 23:53:52
Post Id


Посетитель


Покинул форум
Сообщений всего: 329
Дата рег-ции: Апр. 2011  


Помог: 7 раз(а)




В javascript если переменная в функции объявляется с var, то ее область видимости оганичивается самой функцией и функциями, объявленными внутри нее. Соответственно, element будет видна в tree и в безымянной функции, повешенной на onclick, а node будет видна только внутри onclick-функции.
Но в сам вопрос поставлен не правильно. Функция на onclick объявлена не как объект, поэтому все переменные в ней живут только в момент ее выполнения и создаются каждый раз заново. Что присвоится node зависит только от того, насколько правильно там отработает if. Зачем было всю эту конструкцию вешать на конец загрузки документа и использовать для этого jquery не совсем ясно.
 
 Top
LIME
Отправлено: 13 Октября, 2013 - 11:00:57
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




MAXUS пишет:
Функция на onclick объявлена не как объект
а это как?
MAXUS пишет:
поэтому все переменные в ней живут только в момент ее выполнения и создаются каждый раз заново.
не все а только собственные...объявленные через var
внешние вполне себе неплохо живут и после
кстати 2 раза var это никуда не годится
MAXUS пишет:
Зачем было всю эту конструкцию вешать на конец загрузки документа
чтоб элементы уже существовали ... это кстати вполне понятно
 
 Top
MAXUS
Отправлено: 13 Октября, 2013 - 18:44:07
Post Id


Посетитель


Покинул форум
Сообщений всего: 329
Дата рег-ции: Апр. 2011  


Помог: 7 раз(а)




Цитата:
а это как?

Например,

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 Октября, 2013 - 18:44:43)

 
 Top
IllusionMH
Отправлено: 13 Октября, 2013 - 20:14:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




MAXUS, дальнейшее изменение кода может привести к созданию глобальных переменных. Объявление переменных в условии(не путать с присваиванием) плохая практика.Так что все еще актуально объявлять переменные вверху функции(все равно в данном случае код будет интерпретироваться как если бы var node была объявлена вначале функции).

(Отредактировано автором: 13 Октября, 2013 - 20:16:29)

 
 Top
MAXUS
Отправлено: 13 Октября, 2013 - 22:30:30
Post Id


Посетитель


Покинул форум
Сообщений всего: 329
Дата рег-ции: Апр. 2011  


Помог: 7 раз(а)




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 станет глобальной? Если это имеется в виду, то согласен. От греха подальше, лучше объявить отдельно и до. Спасибо за пояснения.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB