jQuery и функциональный объем

Это:

    ($.fn.myFunc = function() {
       var Dennis = function() { /*code */ }
       $('#Element').click(Dennis);
    })();

эквивалентный:

    ($.fn.myFunc = function() {
       $('#Element').click(function() { /*code */ });
    })();

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

Спасибо!

7
задан Jason 29 April 2010 в 00:29
поделиться

4 ответа

Единственное отличие состоит в том, что первый предоставляет ссылку на функцию.

Таким образом, вы можете сделать это:

($.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 (); , чтобы выполнить это, если вы не хотите, чтобы ВСЕ обработчики щелчков на # Элемент поджигается.)

8
ответ дан 7 December 2019 в 05:19
поделиться

То же самое. Я обычно использую второй вариант - маршрут анонимной функции.

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

Анонимное закрытие функций - более надежный шаблон.

0
ответ дан 7 December 2019 в 05:19
поделиться

второй выглядит красивее :) но тот же

0
ответ дан 7 December 2019 в 05:19
поделиться

Да, анонимная функция более понятна, без добавления лишних именованных функций, которые вызываются мгновенно.

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

0
ответ дан 7 December 2019 в 05:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: