web-dev-qa-db-fra.com

Quel est le but réel de $ .noop () dans jQuery 1.4?

Après avoir jeté sur les notes de publication concernant jQuery 1.4, je suis tombé sur $.noop() qui est:

Description : Une fonction vide. (ajouté dans 1.4)

_ {Vous pouvez utiliser cette fonction vide pour passer une fonction qui ne fera rien.} _

Peut-être me manque-t-il quelque chose de profond ici, mais quel est exactement un usage pratique de passer d'une fonction vide

Des exemples de code appréciés.

46
Sampson

Cette fonction a été proposée en raison de problèmes de performances sur les systèmes embarqués lors de l’utilisation de $.ajax, indiqué sur la liste de diffusion jQuery-Dev. Vous pouvez voir le thread .

Fondamentalement, ils ont préféré introduire et utiliser cette fonction vide unique, plutôt que de déclarer des fonctions anonymes vides tout autour.

Maintenant, cette fonction est utilisée en interne dans les modules ajax , event et offset .

Vous pouvez aussi regarder le commit quand il a été introduit.

48
CMS

Si vous avez une fonction qui accepte une fonction en tant que paramètre et que vous n'avez aucun code à lui attribuer, vous pouvez passer $.noop.

Je ne peux pas penser à de tels cas dans jQuery où le paramètre n'est pas facultatif en premier lieu, cependant.

Contrairement à l'écriture function(){}, transmettre $.noop ne créera pas de nouvelle instance de fonction, ce qui économisera un peu de mémoire. Cependant, si quoi que vous transmettiez modifie l'objet de fonction (par exemple, funcParam.id = 2), transmettre $.noop gâchera les choses.

18
SLaks

Exemple du monde réel (enfin presque):

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

Utilisez-le au lieu de function (){}

9
Corin

Probablement si une mauvaise API nécessite une fonction en tant que paramètre et que vous ne voulez rien y faire, ce serait une façon de rendre cela évident, avec l'aide de la structure.

3
Noon Silk

J'utilise quelques plugins qui nécessitent des rappels, mais pour certaines parties, je ne souhaite pas utiliser un certain rappel. Donc, j'ai mis dans function () {}. 

noop est défini dans la source jQuery comme 

noop: function() {}

il ira donc n'importe où vous utiliseriez une fonction vierge, comme dans l'exemple ci-dessus.

2
JAL

La seule raison logique est que si vous appelez une fonction qui fait quelque chose ET en appelle une autre, et que vous souhaitiez que la fonction de niveau supérieur le fasse sans appeler de fonction paramètre.

La plupart des fonctions jQuery prennent éventuellement une fonction de paramètre, vous n’avez donc pas à en passer un. Peut-être qu’il ya une ou deux où ce n’est pas le cas - ou peut-être est-ce d’aider les développeurs avec leur code personnalisé qui se comporte comme ceci.

0
Kaleb Brasee

Si une fonction nécessite que vous passiez une fonction en argument peut-être? Il est plus court de dire do_something($.noop) que do_something(function(){}).

Bien que pas beaucoup ...

... 6 personnages ...

... oui, cette fonctionnalité a l'air tout à fait inutile.

0
Nicolás

C’est purement une commodité/un remplacement pour function(){} dans le contexte où des rappels sont nécessaires - je ne pense pas que je l’utiliserai de si tôt.

Je parie que l’équipe jQuery a bien ri quand elle l’a lâchée, a aussi un but comique.

0
meder omuraliev

Cela peut être utile si vous avez une fonction qui fournit des fonctions à d’autres fonctions.

Exemple: vous avez une liste de données. Chaque élément a un bouton qui fait quelque chose. Le "quelque chose" peut être différent pour chaque article. Vous avez une "FunctionFactory" qui prend l'élément et renvoie une fonction. Si vous ne voulez pas que le bouton agisse pour quelque raison que ce soit, le moyen le plus propre peut être de renvoyer une fonction vide, car vous saurez ainsi que votre usine renvoie TOUJOURS une fonction.

Je n'ai pas d'exemple concret pour jQuery, mais j'imagine que cela pourrait être utile lorsqu'il est utilisé dans un bloc .each ou .map.

0
Michael Stum