Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Скобки при вызове функции (https://javascript.ru/forum/events/60725-skobki-pri-vyzove-funkcii.html)

karden 16.01.2016 16:06

Скобки при вызове функции
 
Всем добрый день.

В очередной раз пытаюсь вникнуть в JS. Идет очень туго. И один вопрос прямо совсем ставит в тупик.

Пишу собственную функцию. Делаю ее вызов. Если скобки после имени не ставлю (при вызове) - все работает отлично. Если ставлю - перестает работать.

Где-то некоторое время назад читал о разнице вызова функции со скобками и без (что-то типа вызов саой функии или ссылки на нее или что-то подобное), но совершенно не могу найти где это было написано. Во всех книжках пишут, что скобки надо ставить всегда.

Можно краткую справочку по этому вопросу или ссылочку, где об этом внятно написано. Проблема в том, что теперь приспичило написать функцию с параметром :)

Спасибо.

karden 16.01.2016 16:23

function switchMonth (Direction) {
  var TotalMonth =  $('.CalDIV').length;
  alert (TotalMonth);
}

// Так работает
$('.pMonth').click(switchMonth);

// Так не работает
$('.pMonth').click(switchMonth(1));


Я, видимо, еще не совсем корректно сформулировал вопрос.

Тот вариант, который "не работает", на самом деле работает, но не ждет события ".click", а выполняется сразу.

Lemme 16.01.2016 16:58

karden, ибо в первом варианте Вы передаете функцию, а во втором Вы ее вызываете и передаете результат ее выполнения, т.е undefined.

Вот так будет работать.
$('.pMonth').click(function() {
     switchMonth(1);
});


Или нужно написать функцию, которая будет возврашать функцию. Т.е

function switchMonth(Direction) {
     return function() {
          var TotalMonth =  $('.CalDIV').length;
          alert (TotalMonth);
     }
}

$('.pMonth').click(switchMonth(1));


Ну, или так:

<script src="https://code.jquery.com/jquery-2.2.0.min.js"></script>

<button>click</button>
<script>
  function foo(e) {
    alert(e.data.param);
    alert(e.data.param1)
  }

  $('button').click({ param: 'foo', param1: 'bar' }, foo);
</script>

karden 16.01.2016 17:29

Спасибо большое.

Суть проблемы понятна. Собственно и варианты решения понятны.

Совсем тяжело, как-то, идет у меня этот язык... Вот как-то все не так, как везде, хотя, вроде, и примерно так же, когда смотришь работающие примеры... :)

Lemme 16.01.2016 17:56

karden, может быть не там знания черпаете?=)

http://learn.javascript.ru

DynkanMaclaud 16.01.2016 18:04

karden,
Ну а почему вы нативный js не учите, почему сразу jquery?

karden 16.01.2016 18:09

Да и там тоже...

Я просто все больше на перле пишу. Да и на нем, не сказать, что часто. А веб-программированием последний раз занимался лет 20 назад. Тогда все было, мягко сказать, не совсем так как сейчас.

А сейчас понимаю, что интерфейсы, по хорошему, лучше все делать для веба. Вот, решил, что надо попробовать разобраться. Голова скоро взорвется.

karden 16.01.2016 18:17

Цитата:

Сообщение от DynkanMaclaud (Сообщение 403997)
karden,
Ну а почему вы нативный js не учите, почему сразу jquery?

Если б я мог сам для себя внятно ответить на этот вопрос...

На самом деле мне показалось, что jquery немного проще с точки зрения того, что он как-то на себя забирает "низкоуровневое взаимодействие с DOM".

Ну и для текущей задачи мне как-раз надо ajax прирастить. Если я правильно понимаю, то в базовых функциях это значимо сложнее.

Возможно, написал полный бред, но именно так сейчас и пытаюсь "идти по незнакомому лесу, ночью, с черной повязкой на глазах"...

DynkanMaclaud 16.01.2016 19:07

)))Lemme,
скинул тебе ссылку на самый крутой ресурс по js) там ты не пропадаешь)))

karden 16.01.2016 19:25

Круто!

Спасибо. А куда? В Личных сообщения - нет, на почте - нет (в папке СПАМ, тоже нет... :)


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