Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.01.2016, 16:06
Аспирант
Отправить личное сообщение для karden Посмотреть профиль Найти все сообщения от karden
 
Регистрация: 16.01.2016
Сообщений: 57

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

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

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

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

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

Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 16.01.2016, 16:20
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,672

karden, например
Ответить с цитированием
  #3 (permalink)  
Старый 16.01.2016, 16:23
Аспирант
Отправить личное сообщение для karden Посмотреть профиль Найти все сообщения от karden
 
Регистрация: 16.01.2016
Сообщений: 57

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

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

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


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

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

Последний раз редактировалось karden, 16.01.2016 в 16:36.
Ответить с цитированием
  #4 (permalink)  
Старый 16.01.2016, 16:58
Аватар для Lemme
Профессор
Отправить личное сообщение для Lemme Посмотреть профиль Найти все сообщения от Lemme
 
Регистрация: 15.07.2015
Сообщений: 511

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>

Последний раз редактировалось Lemme, 16.01.2016 в 17:12.
Ответить с цитированием
  #5 (permalink)  
Старый 16.01.2016, 17:29
Аспирант
Отправить личное сообщение для karden Посмотреть профиль Найти все сообщения от karden
 
Регистрация: 16.01.2016
Сообщений: 57

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

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

Совсем тяжело, как-то, идет у меня этот язык... Вот как-то все не так, как везде, хотя, вроде, и примерно так же, когда смотришь работающие примеры...
Ответить с цитированием
  #6 (permalink)  
Старый 16.01.2016, 17:56
Аватар для Lemme
Профессор
Отправить личное сообщение для Lemme Посмотреть профиль Найти все сообщения от Lemme
 
Регистрация: 15.07.2015
Сообщений: 511

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

http://learn.javascript.ru
Ответить с цитированием
  #7 (permalink)  
Старый 16.01.2016, 18:04
Аватар для DynkanMaclaud
Профессор
Отправить личное сообщение для DynkanMaclaud Посмотреть профиль Найти все сообщения от DynkanMaclaud
 
Регистрация: 08.08.2014
Сообщений: 261

karden,
Ну а почему вы нативный js не учите, почему сразу jquery?
Ответить с цитированием
  #8 (permalink)  
Старый 16.01.2016, 18:09
Аспирант
Отправить личное сообщение для karden Посмотреть профиль Найти все сообщения от karden
 
Регистрация: 16.01.2016
Сообщений: 57

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

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

А сейчас понимаю, что интерфейсы, по хорошему, лучше все делать для веба. Вот, решил, что надо попробовать разобраться. Голова скоро взорвется.
Ответить с цитированием
  #9 (permalink)  
Старый 16.01.2016, 18:17
Аспирант
Отправить личное сообщение для karden Посмотреть профиль Найти все сообщения от karden
 
Регистрация: 16.01.2016
Сообщений: 57

Сообщение от DynkanMaclaud Посмотреть сообщение
karden,
Ну а почему вы нативный js не учите, почему сразу jquery?
Если б я мог сам для себя внятно ответить на этот вопрос...

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

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

Возможно, написал полный бред, но именно так сейчас и пытаюсь "идти по незнакомому лесу, ночью, с черной повязкой на глазах"...
Ответить с цитированием
  #10 (permalink)  
Старый 16.01.2016, 19:07
Аватар для DynkanMaclaud
Профессор
Отправить личное сообщение для DynkanMaclaud Посмотреть профиль Найти все сообщения от DynkanMaclaud
 
Регистрация: 08.08.2014
Сообщений: 261

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



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Анонимные\именованные функции - экономия памяти при создании? nevro Общие вопросы Javascript 3 17.07.2015 15:19
Подставка текста в скрипт при его вызове awaro Общие вопросы Javascript 5 04.06.2015 08:35
Вызов функции при загрузке страницы disallow jQuery 6 24.07.2012 15:19
Скобки после имени функции. В чем разница, если они есть и если их нет? jsuse Общие вопросы Javascript 2 19.11.2011 16:11
SetTimeout не принимает параметр при повторном вызове 2dkott Общие вопросы Javascript 15 08.09.2009 16:37