Подтвердить что ты не робот

Какую реальную цель выполняет функция $.noop() в jQuery 1.4?

Выдавая заметки о выпуске jQuery 1.4, я встретил $.noop(), который:

Описание: пустая функция. (добавлено в 1.4)

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

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

Обозначены примеры кода.

4b9b3361

Ответ 1

Эта функция была предложена из-за проблем с производительностью встроенных систем при использовании $.ajax, сообщенных в списке рассылки jQuery-Dev. Вы можете увидеть thread.

В принципе, они предпочли ввести и использовать эту единственную пустую функцию, а не объявлять пустые анонимные функции.

Теперь эта функция внутренне используется в ajax, event и offset.

Вы можете взглянуть на commit, когда он был введен также.

Ответ 2

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

Я не могу думать о таких случаях в jQuery, где параметр не является необязательным, однако.

В отличие от записи function(){}, передача $.noop не создаст новый экземпляр функции, сохранив бит памяти. Однако, если вы передаете его для модификации объекта функции (например, funcParam.id = 2), передача $.noop будет испорчена.

Ответ 3

Пример реального мира (ну почти):

jQuery.fn.myAwesomeAjax = function(url, complete) {
  return jQuery.ajax(url || this.url)
    .complete(complete || jQuery.noop);
};

Используйте его вместо function (){}

Ответ 4

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

Ответ 5

Я использую пару плагинов, которые требуют обратных вызовов, но для некоторых частей я фактически не хочу использовать определенный обратный вызов. Итак, я ввел функцию() {}.

noop определяется в источнике jQuery как

noop: function() {}

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

Ответ 6

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

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

Ответ 7

Если функция требует, чтобы вы могли передать функцию в качестве аргумента? Короче говоря do_something($.noop) чем do_something(function(){}).

Хотя не сильно...

... 6 символов...

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

Ответ 8

Это просто удобство/замена для function(){} в контексте того, где требуются обратные вызовы - я не думаю, что буду использовать его в ближайшее время.

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

Ответ 9

Это может быть полезно, если у вас есть функция, которая поставляет функции другим функциям.

Пример: у вас есть список данных. У каждого элемента есть кнопка, которая что-то делает. "Что-то" может отличаться для каждого элемента. У вас есть "FunctionFactory", который принимает элемент и возвращает функцию. Если вы не хотите, чтобы кнопка делала что-то по какой-либо причине, самым чистым способом было бы вернуть пустую функцию, так как вы знаете, что ваш Factory ALWAYS возвращает функцию.

У меня нет конкретного примера для jQuery, но я думаю, это может пригодиться при использовании в блоке .each или .map.