Какую реальную цель выполняет $ .noop () в jQuery 1.4? - PullRequest
46 голосов
/ 15 января 2010

Обдумывая заметки о выпуске jQuery 1.4, я наткнулся на $.noop(), что:

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

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

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

Примеры кода приветствуются.

Ответы [ 9 ]

48 голосов
/ 15 января 2010

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

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

Теперь эта функция используется в модулях ajax , , и , смещение .

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

19 голосов
/ 15 января 2010

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

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

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

9 голосов
/ 28 июня 2011

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

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

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

3 голосов
/ 15 января 2010

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

2 голосов
/ 15 января 2010

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

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

noop: function() {}

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

0 голосов
/ 15 января 2010

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

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

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

0 голосов
/ 15 января 2010

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

Могу поспорить, что команда jQuery посмеялась, когда они ее бросили, но также служит комедийной цели.

0 голосов
/ 15 января 2010

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

Хотя ненамного ...

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

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

0 голосов
/ 15 января 2010

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

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

...