Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Скобки после имени функции. В чем разница, если они есть и если их нет? (https://javascript.ru/forum/misc/23295-skobki-posle-imeni-funkcii-v-chem-raznica-esli-oni-est-i-esli-ikh-net.html)

jsuse 19.11.2011 13:09

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

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

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


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

В связи с этим вопрос. Какая разница? Мы присваиваем саму функцию, а не ее результат. Ок. Но в результате выполнения присвоенной функции получается всё равно же результат. То есть мы фактически всё равно результат присваиваем. В чем разница?

B@rmaley.e><e 19.11.2011 13:37

Цитата:

Сообщение от 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).

micscr 19.11.2011 15:11

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


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