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]   

> Без описания
Pavelbeginner
Отправлено: 10 Апреля, 2012 - 20:18:17
Post Id



Частый посетитель


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


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




Внутри ф-ции, например, переменную можно объявить до или после ее вызова в ф-ции, например вот это не вызовет ошибки:
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. function()
  3. {
  4.    a = a + 1;
  5.    
  6.    var a;
  7. }
  8.  

А можно внутри ф-ции объявить другую ф-цию после ее вызова? То есть не вызовет вот это ошибки?:
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. function()
  3. {
  4.    test();
  5.    function test()
  6.    {
  7.        alert('hello');
  8.    }
  9. }
  10.  
 
 Top
OrmaJever
Отправлено: 10 Апреля, 2012 - 20:22:18
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




А если попробовать? Однако


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Pavelbeginner
Отправлено: 10 Апреля, 2012 - 20:36:02
Post Id



Частый посетитель


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


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




OrmaJever пишет:
А если попробовать? Однако
Попробовать попробовал, но спрашиваю здесь, чтобы быть уверенным наверняка, что это во всех браузерах нормально будет. К тому же возникает сопутствующий вопрос: вот код:
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. function()
  3. {
  4.     var hello = 10;
  5.    
  6.     temp();
  7.     hello = 20;
  8.     function temp()
  9.     {
  10.          alert(hello);
  11.     }
  12.     hello = 30;
  13.  
  14. }
  15.  
  16. Это нормальная конструкция?
  17.  
 
 Top
OrmaJever
Отправлено: 10 Апреля, 2012 - 20:48:06
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




javascript это язык и у него есть стандарт, если в одном браузере ошибок не выдаёт то и в других не должно быть. А что страного в этой конструкции? То что функция в функции обьявлена или то что она вначале вызвана а затем определена?

(Отредактировано автором: 10 Апреля, 2012 - 20:48:48)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Pavelbeginner
Отправлено: 10 Апреля, 2012 - 20:57:54
Post Id



Частый посетитель


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


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




OrmaJever пишет:
или то что она вначале вызвана а затем определена?
Какое значение будет выведено? Ф-ция вызывается до своего определения. В общем можно так делать - вызывать ф-цию до ее определения?
 
 Top
OrmaJever
Отправлено: 10 Апреля, 2012 - 21:28:17
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




Pavelbeginner пишет:
Какое значение будет выведено?

Ну во-первых это можно и самому проверить.
во-вторых это очевидно - 10. Вы присвоили переменой значение 10 зетем эго вывели.
Что касается вызова функции до её определения то это нормально в php тоже так возможно.
Знаете в чём разница этих двух примеров?
PHP:
скопировать код в буфер обмена
  1. function funct1() { alert(); }
  2. // и
  3. var funct2 = function () { alert(); }

В том что первая существует всегда, а вторая только после определения.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Pavelbeginner
Отправлено: 10 Апреля, 2012 - 21:48:41
Post Id



Частый посетитель


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


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




OrmaJever пишет:
В том что первая существует всегда, а вторая только после определения.
Не понял что значит существует всегда и только после определения?

OrmaJever пишет:
во-вторых это очевидно - 10. Вы присвоили переменой значение 10 зетем эго вывели.
Ну не так уж и очевидно, если сделать вот так:

CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. function()
  3. {
  4.     var hello = 10;
  5.    
  6.     setTimeout(temp, 1000);
  7.     hello = 20;
  8.     function temp()
  9.     {
  10.          alert(hello);
  11.     }
  12.     hello = 30;
  13.  
  14. }
  15.  
 
 Top
Panoptik
Отправлено: 10 Апреля, 2012 - 21:53:31
Post Id



Постоянный участник


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


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




ну так скорее всего выведет 30...


вы решили взорвать мозг себе и окружающим? Не понял
почему бы не придерживаться стандартных правил программирования?) [strike]обизательно[/strike] обязательно выделываться?)

(Отредактировано автором: 10 Апреля, 2012 - 21:55:11)



-----
Just do it
 
 Top
OrmaJever
Отправлено: 10 Апреля, 2012 - 22:31:30
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




Pavelbeginner пишет:
Не понял что значит существует всегда и только после определения?

PHP:
скопировать код в буфер обмена
  1. funct1();
  2. funct2(); // неопределёная функция
  3.  
  4. function funct1() { alert('funct1'); }
  5. var funct2 = function () { alert('funct2'); }
  6.  
  7. // а вот зделсь уже будут обе функции.
  8. //funct1();
  9. //funct2();

Pavelbeginner пишет:
Ну не так уж и очевидно, если сделать вот так:

а можно написать так
CODE (javascript):
скопировать код в буфер обмена
  1. setTimeout(temp, 86400000);

Дак и сутки пройдут, и может уже не надо будет это всё...
Вобще для меня немного неожидано, поскольку в js нету многопоточности и поидее пока выполняется таймер выполнение кода не должно ити, но по видимому таймер тикает в другом потоке, но это уже совсем другая история.

(Отредактировано автором: 10 Апреля, 2012 - 22:31:52)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Pavelbeginner
Отправлено: 11 Апреля, 2012 - 07:16:50
Post Id



Частый посетитель


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


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




OrmaJever пишет:
funct1();
funct2(); // неопределёная функция

function funct1() { alert('funct1'); }
var funct2 = function () { alert('funct2'); }

// а вот зделсь уже будут обе функции.
//funct1();
//funct2();


Интересно, при том, что funct1 по сути та же переменная и можно любое значение ей присвоить, а ведут себя по-разному. Получается, что интерпретатор js сначала анализирует весь скрипт и уж только потом приступает к выполнению строчка за строчкой? Просто раньше я читал, что выполнение js идет строка за строкой. Но выполнение строки за строкой будет не возможно т.к. вызывая ф-цию, которая еще не определена и она отрабатывает - без предварительного анализа документа это невозможно. Либо просто дойдя до вызова ф-ции интерпретатор анализирует весь блок(все, что внутри фигурных скобок{}) и, если находит объявление, то вызывается ф-цию.

(Отредактировано автором: 11 Апреля, 2012 - 07:17:49)

 
 Top
OrmaJever
Отправлено: 11 Апреля, 2012 - 12:37:20
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




Pavelbeginner пишет:
Просто раньше я читал, что выполнение js идет строка за строкой.

Да это так, в php точно так же скрипт читает строчка за строчкой но такое тоже возмонжо потому что скрипт выполняется в 2 прохода.
(Добавление)
А вот точно такая же тема только про php http://forum.php.su/topic.php?fo...1&topic=4010

(Отредактировано автором: 11 Апреля, 2012 - 12:41:50)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 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