16.01.2016, 16:06
|
Аспирант
|
|
Регистрация: 16.01.2016
Сообщений: 57
|
|
Скобки при вызове функции
Всем добрый день.
В очередной раз пытаюсь вникнуть в JS. Идет очень туго. И один вопрос прямо совсем ставит в тупик.
Пишу собственную функцию. Делаю ее вызов. Если скобки после имени не ставлю (при вызове) - все работает отлично. Если ставлю - перестает работать.
Где-то некоторое время назад читал о разнице вызова функции со скобками и без (что-то типа вызов саой функии или ссылки на нее или что-то подобное), но совершенно не могу найти где это было написано. Во всех книжках пишут, что скобки надо ставить всегда.
Можно краткую справочку по этому вопросу или ссылочку, где об этом внятно написано. Проблема в том, что теперь приспичило написать функцию с параметром :)
Спасибо.
|
|
16.01.2016, 16:20
|
Профессор
|
|
Регистрация: 07.11.2013
Сообщений: 4,672
|
|
karden, например
|
|
16.01.2016, 16:23
|
Аспирант
|
|
Регистрация: 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.
|
|
16.01.2016, 16:58
|
|
Профессор
|
|
Регистрация: 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.
|
|
16.01.2016, 17:29
|
Аспирант
|
|
Регистрация: 16.01.2016
Сообщений: 57
|
|
Спасибо большое.
Суть проблемы понятна. Собственно и варианты решения понятны.
Совсем тяжело, как-то, идет у меня этот язык... Вот как-то все не так, как везде, хотя, вроде, и примерно так же, когда смотришь работающие примеры...
|
|
16.01.2016, 17:56
|
|
Профессор
|
|
Регистрация: 15.07.2015
Сообщений: 511
|
|
karden, может быть не там знания черпаете?=)
http://learn.javascript.ru
|
|
16.01.2016, 18:04
|
|
Профессор
|
|
Регистрация: 08.08.2014
Сообщений: 261
|
|
karden,
Ну а почему вы нативный js не учите, почему сразу jquery?
|
|
16.01.2016, 18:09
|
Аспирант
|
|
Регистрация: 16.01.2016
Сообщений: 57
|
|
Да и там тоже...
Я просто все больше на перле пишу. Да и на нем, не сказать, что часто. А веб-программированием последний раз занимался лет 20 назад. Тогда все было, мягко сказать, не совсем так как сейчас.
А сейчас понимаю, что интерфейсы, по хорошему, лучше все делать для веба. Вот, решил, что надо попробовать разобраться. Голова скоро взорвется.
|
|
16.01.2016, 18:17
|
Аспирант
|
|
Регистрация: 16.01.2016
Сообщений: 57
|
|
Сообщение от DynkanMaclaud
|
karden,
Ну а почему вы нативный js не учите, почему сразу jquery?
|
Если б я мог сам для себя внятно ответить на этот вопрос...
На самом деле мне показалось, что jquery немного проще с точки зрения того, что он как-то на себя забирает "низкоуровневое взаимодействие с DOM".
Ну и для текущей задачи мне как-раз надо ajax прирастить. Если я правильно понимаю, то в базовых функциях это значимо сложнее.
Возможно, написал полный бред, но именно так сейчас и пытаюсь "идти по незнакомому лесу, ночью, с черной повязкой на глазах"...
|
|
16.01.2016, 19:07
|
|
Профессор
|
|
Регистрация: 08.08.2014
Сообщений: 261
|
|
)))Lemme,
скинул тебе ссылку на самый крутой ресурс по js) там ты не пропадаешь)))
|
|
|
|