JavaScript анонимные функции
Я прочитал следующее в Интернете на этих выходных, и я хотел знать, считают ли большинство других это правильным (лучшим) способом ведения дел.
Это не лучший (правильный) способ сделать что-то:
$ (document).ready (function () {$ ('# magic'). click (function (e) {$ ('# yayeffects'). slideUp (function () {//...});}); $ ('# счастье').load(url + ' #unicorns', function() { // ... }); });
Что это лучше
var PI = { onReady: function() {. $ ('# Магия') нажмите (PI.candyMtn); $('# счастье').load(PI.url + ' #unicorns', PI.unicornCb); }, candyMtn: function(e) { $('#') Yayeffects slideUp(PI.slideCb). }, slideCb: function () {...}, unicornCb: function () {...} }; $ (Документ).ready(PI.onReady);
Один работает лучше, чем другой? Проще для отладки?
Мысли? Комментарии?
2 ответа
Если у вас есть трассировка стека с множеством анонимных функций, то потребуется значительно больше времени, чтобы выяснить, где именно произошла ошибка и откуда она была вызвана. так плюс 1 за секунду.
Код внутри обработчика событий часто не имеет ничего общего с кодом, в котором обработчик регистрируется, и поэтому должен находиться в отдельной функции / модуле. плюс 1 за секунду.
Использование анонимных функций для слушателей также плохо, потому что в случае, если вам нужно удалить этих слушателей (о чем большинство людей не заботятся), вы можете удалить только их, и вам не нужно заботиться о случайном удалении других слушателей из других частей кода., плюс 1 за второе.
Поместить связанные функции в один объект не обязательно лучше. В основном функция onReady плоха, если вы используете поведение слушателей для разных объектов dom.
не заботится о производительности. слушатель обычно не вызывается так часто, как это имеет значение. Если это так, то, скорее всего, есть проблема где-то еще.
Второй вариант можно использовать повторно - вы можете повторно использовать slideCb и другие обработчики для других событий для других элементов управления.