$(window).resize(myFunction());
немедленно вызывает myFunction
и передает возвращаемое значение в resize
. Добавление скобок после имени функции / ссылки вызывает функцию.
С другой стороны,
$(window).resize(function(){myFunction()});
передает анонимную функцию в resize
. myFunction
вызывается только тогда, когда вызывается внешняя функция.
Анонимные функции не являются чем-то особенным. В данном случае это просто некое определение встроенной функции . Вы можете легко заменить его ссылкой на функцию:
var handler = function(){myFunction()}; // take out the function definition
$(window).resize(handler); // and replace it with the new name
Теперь вы можете видеть, что после имени функции нет скобок, что означает, что handler
не вызывается, передается только ссылка.
Надеюсь, теперь вы также видите, что создание новой функции в этом примере не нужно. Вы можете добиться того же, просто передав ссылку на myFunction
:
$(window).resize(myFunction);
Но оба способа имеют свои варианты использования.
Первый пример $(window).resize(myFunction());
все еще может быть полезен, если myFunction
возвращает функцию , которая должна использоваться в качестве обработчика события:
function myFunction() {
var handler = function() {};
return handler;
}
Возможно, перенастроенный обработчик зависит от параметра, переданного в myFunction
.
Передача анонимной функции необходима, если вы хотите вызвать myFunction
с некоторыми конкретными аргументами:
function myFunction(a, b) {
alert(a + b);
}
$(window).resize(function(){
myFunction(40, 2);
});
Обновление:
@T.J. Crowder сделал важный комментарий об объекте event
. Каждый обработчик события получает объект события, переданный в качестве первого параметра. Если бы вы определили свою функцию как
function myFunction(event) {
...
}
чтобы иметь (более легкий) доступ к нему, используя анонимную функцию, вам нужно будет передать его через:
$(window).resize(function(event){myFunction(event)});
, если вы хотите его использовать.