Какую реальную цель выполняет $.noop() в jQuery 1.4?
Обдумывая заметки о выпуске jQuery 1.4, я наткнулся $.noop()
который:
Описание: пустая функция. (добавлено в 1.4)
Вы можете использовать эту пустую функцию, когда хотите передать функцию, которая ничего не будет делать.
Возможно, я упускаю что-то глубокое здесь, но что именно практического использования для передачи пустой функции?
Примеры кода приветствуются.
9 ответов
Эта функция была предложена из-за проблем с производительностью встроенных систем при использовании $.ajax
, сообщается в списке рассылки jQuery-Dev. Вы можете увидеть поток.
По сути, они предпочитали вводить и использовать эту единственную пустую функцию, а не объявлять пустые анонимные функции повсюду.
Теперь эта функция внутренне используется в модулях ajax, event и offset.
Вы также можете посмотреть коммит, когда он был представлен.
Если у вас есть функция, которая принимает функцию в качестве параметра, и у вас нет кода для ее передачи, вы можете передать $.noop
,
Я не могу вспомнить ни одного такого случая в jQuery, где параметр не является необязательным в первую очередь, хотя.
В отличие от письма function(){}
, проходя $.noop
не будет создавать новый экземпляр функции, сохраняя немного памяти. Однако, если все, что вы передаете, изменяет объект функции (например, funcParam.id = 2
), проходя $.noop
все испортит.
Пример из реального мира (ну почти):
jQuery.fn.myAwesomeAjax = function(url, complete) {
return jQuery.ajax(url || this.url)
.complete(complete || jQuery.noop);
};
Используйте это вместо function (){}
Вероятно, если какой-то плохой API требует функцию в качестве параметра, и вы не хотите в ней что-либо делать, это будет способ, поддерживаемый фреймворком, чтобы сделать это очевидным.
Я использую несколько плагинов, которые требуют обратных вызовов, но для некоторых частей я на самом деле не хочу использовать определенный обратный вызов. Итак, я вставил в функцию () {}.
noop определяется в источнике jQuery как
noop: function() {}
поэтому он подойдет везде, где вы будете использовать пустую функцию, например, в приведенном выше примере.
Единственная логическая причина - если вы вызываете функцию, которая делает что-то, и вызывает другую функцию, и вы хотите, чтобы функция более высокого уровня выполняла свою функцию без вызова функции параметра.
Большинство функций jQuery необязательно принимают функцию параметра, поэтому вам не нужно передавать один из них. Возможно, есть один или два, где это не так - или, возможно, это помогает разработчикам с их пользовательским кодом, который ведет себя так.
Это может быть полезно, если у вас есть функция, которая предоставляет функции для других функций.
Пример: у вас есть список данных. У каждого предмета есть кнопка, которая что-то делает. "Что-то" может быть разным для каждого предмета. У вас есть "FunctionFactory", которая принимает элемент и возвращает функцию. Если вы не хотите, чтобы кнопка что-то делала по какой-либо причине, тогда самый простой способ - вернуть пустую функцию, так как вы знаете, что ваш Factory ALWAYS возвращает функцию.
У меня нет конкретного примера для jQuery, но я думаю, что это может пригодиться при использовании в блоке.each или.map.
Если функция требует, чтобы вы передали функцию в качестве аргумента, может быть? Короче сказать do_something($.noop)
чем do_something(function(){})
,
Хотя не сильно...
... 6 символов...
... да, эта функция выглядит совершенно бесполезной на самом деле.
Это просто удобство / замена для function(){}
в контексте, где требуются обратные вызовы - я не думаю, что буду использовать его в ближайшее время.
Могу поспорить, что команда jQuery посмеялась, когда ее закинули, хотя и служит комедийной цели.