Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.11.2011, 14:09
Аспирант
Отправить личное сообщение для jsuse Посмотреть профиль Найти все сообщения от jsuse
 
Регистрация: 10.04.2010
Сообщений: 92

Скобки после имени функции. В чем разница, если они есть и если их нет?
Вот пример из книги Флэнагана. Это для вызова функции.

<form name="f1">
<input name="b1" type="button" value="Нажми меня">
</form>

function plead() { document.f1.b1.value += ", пожалуйста!"; }
document.f1.b1.onmouseover = plead;


Потом следует объяснение.
Обратите особое внимание на последнюю строку: здесь после имени функции нет скобок. Чтобы определить обработчик события, мы присваиваем свойству-обработчику события саму функцию, а не результат ее вызова.

В связи с этим вопрос. Какая разница? Мы присваиваем саму функцию, а не ее результат. Ок. Но в результате выполнения присвоенной функции получается всё равно же результат. То есть мы фактически всё равно результат присваиваем. В чем разница?
Ответить с цитированием
  #2 (permalink)  
Старый 19.11.2011, 14:37
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Сообщение от jsuse
Но в результате выполнения присвоенной функции получается всё равно же результат
Во-первых, вопрос в том, когда будет вызвана эта функция и будет ли вообще вызвана.
Если Вы напишете
function plead() { document.f1.b1.value += ", пожалуйста!"; }
document.f1.b1.onmouseover = plead;
То функция будет вызываться каждый раз, когда Вы наводите указатель мыши на кнопку. Таким образом, она может вообще не вызваться, если Вы будете старательно обходить кнопку стороной при движении мышью.
Если вы напишете
function plead() { document.f1.b1.value += ", пожалуйста!"; }
document.f1.b1.onmouseover = plead();
То функция будет вызвана единожды при присвоении, а присвоен будет результат её работы. Соответственно, никакой реакции на наведение мыши у кнопки не будет (если только Вы не возвращаете другую функцию).

Во-вторых, код, который будет вызывать Вашу функцию, может предоставить ей некоторые дополнительные данные, передав их как аргументы. Эти данные могут быть неизвестны в момент выполнения кода, а получены в процессе (AJAX / WebWorkers).
Ответить с цитированием
  #3 (permalink)  
Старый 19.11.2011, 16:11
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,576

Попробую попроще объяснить .
plead - это переменная которая имеет тип "функция" и соответственно некую функцию и представляет. И ее можно присваивать.
Но для чего функции? - чтобы их вызывать. Синтаксис вызова функции - скобки после имени функции.
plead(); - вернет то, что возвращает функция в своем теле. Число 5 например.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
глюк форума Gvozd Сайт Javascript.ru 11 18.03.2009 14:37