JavaScript анонимные функции - PullRequest
1 голос
/ 07 февраля 2011

В эти выходные я прочитал следующее в Интернете, и мне хотелось бы узнать, считают ли большинство других, что это правильный (лучший) способ ведения дел.

Это не самый лучший (правильный) способ ведения дел:

$(document).ready(function() {
    $('#magic').click(function(e) {
        $('#yayeffects').slideUp(function() {
            // ...
        });
    });

    $('#happiness').load(url + ' #unicorns', function() {
        // ...
    });
});

Что лучше:

var PI = {
    onReady : function() {
        $('#magic').click(PI.candyMtn);
        $('#happiness').load(PI.url + ' #unicorns', PI.unicornCb);
    },
    candyMtn : function(e) {
        $('#yayeffects').slideUp(PI.slideCb);
    },
    slideCb : function() { ... },
    unicornCb : function() { ... }
};

$(document).ready(PI.onReady);

Работает ли лучше, чем другой?Легче для отладки?

Мысли?Комментарии?

Ответы [ 2 ]

1 голос
/ 07 февраля 2011

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

Код внутри обработчика событий часто не имеет ничего общего с кодом, в котором обработчик регистрируется, и поэтому должен находиться в отдельной функции / модуле. плюс 1 за секунду.

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

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

не волнует производительность. слушателя обычно не так часто называют, что это имеет значение. Если это так, скорее всего, есть проблема где-то еще.

0 голосов
/ 07 февраля 2011

Второй вариант можно использовать повторно - вы можете повторно использовать slideCb и другие обработчики для других событий для других элементов управления.

...