Это:
($.fn.myFunc = function() {
var Dennis = function() { /*code */ }
$('#Element').click(Dennis);
})();
эквивалентный:
($.fn.myFunc = function() {
$('#Element').click(function() { /*code */ });
})();
В противном случае может кто-то объяснять различие и предлагать, чтобы лучший маршрут взял и для производительности, функционального повторного использования и для ясности чтения.
Спасибо!
Единственное отличие состоит в том, что первый предоставляет ссылку на функцию.
Таким образом, вы можете сделать это:
($.fn.myFunc = function() {
var Dennis = function() { /*code */ }
$('#Element').click(Dennis);
Dennis();
})();
Что невозможно с последним.
Это может быть полезно. Например, мне может понадобиться щелчок для управления частью страницы, но я также хочу сделать это при загрузке страницы. Я мог бы сделать это с помощью:
$(function(){
var manipulateSomething = function() {
// do stuff
};
// do it on click
$("#Element").click(manipulateSomething);
// and do it right now (document.ready)
manipulateSomething();
});
(Кроме того: вы бы не вызывали $ ("# Element"). Click ();
, чтобы выполнить это, если вы не хотите, чтобы ВСЕ обработчики щелчков на # Элемент
поджигается.)
То же самое. Я обычно использую второй вариант - маршрут анонимной функции.
Единственная причина назвать вашу функцию встроенной, как в первом примере, - это если вам нужно использовать ее снова, возможно, позже в функции, или если вы хотите, чтобы было очень ясно, что это за функция. Но даже в этом случае, если бы функция Денниса
принимала аргументы, вам по-прежнему нужно было бы использовать новую область видимости функции в своем вызове для передачи этих аргументов.
Анонимное закрытие функций - более надежный шаблон.
Да, анонимная функция более понятна, без добавления лишних именованных функций, которые вызываются мгновенно.
Если вы действительно хотите указать здесь имя, вы можете . Имена обычно помещаются туда только для того, чтобы сделать их рекурсивными.