J'ai trouvé le fichier en question en ligne, et il se trouve qu'il y a une bonne raison à cela. Tout d'abord, il convient de noter que le code dans la question provient d'une source minifiée qui a été indentée.
est ici un morceau de code:
var c=function(){},c={autoSelectFirst:!1,appendTo:"body",serviceUrl:null,lookup:null,
onSelect:null,width:"auto",minChars:1,maxHeight:300,deferRequestBy:0,params:{},
formatResult:g.formatResult,delimiter:null,zIndex:9999,type:"GET",noCache:!1,
onSearchStart:c,onSearchComplete:c,onSearchError:c,
// -----------^------------------^---------------^
Donc, c'est le code dans la question, mais un peu plus. La chose importante à noter est que la variable c
est utilisée dans la création de l'objet littéral, avec onSearchStart:c,onSearchComplete:c,onSearchError:c,
.
Quelle est la valeur c
affectant dans l'objet? Parce que l'objet est encore en cours de création, cela signifie que c
fait toujours référence à la fonction, donc des propriétés comme onSearchStart
, qui semblent être des gestionnaires d'événements obtiennent la fonction vide par défaut.
Cela a beaucoup plus de sens.
Pour vérifier, j'ai également trouvé la source originale, non-vérifiée. Voici le code correspondant:
// v---originally it's called `noop`
var noop = function() { },
that = this,
defaults = {
autoSelectFirst: false,
appendTo: 'body',
serviceUrl: null,
lookup: null,
onSelect: null,
width: 'auto',
minChars: 1,
maxHeight: 300,
deferRequestBy: 0,
params: {},
formatResult: YithAutocomplete.formatResult,
delimiter: null,
zIndex: 9999,
type: 'GET',
noCache: false,
onSearchStart: noop, // <---here it's being used
onSearchComplete: noop, // <---here it's being used
onSearchError: noop, // <---here it's being used
Il est donc clair maintenant que le noop
, qui représente généralement sans opération, a son propre nom et est en effet utilisé dans l'objet créé juste en dessous. En outre, c'est le seulement lieu noop
est utilisé dans le fichier entier. Donc apparemment le minifier était assez intelligent pour voir que la variable initialement appelée noop
n'allait plus être utilisée, donc il était libre de réutiliser ce nom de variable pour l'objet.Un peu impressionnant d'analyse de code, IMO.
Cela ressemble à du code écrit par quelqu'un qui ne savait vraiment pas ce qu'il faisait, ou bien le résultat d'une sorte d'erreur d'édition. – Pointy
Où l'avez-vous rencontré? Le code a-t-il été minifié? On dirait que cela pourrait être un artefact d'un générateur de code automatisé de quelque sorte. Les noms des variables et des paramètres le font ressembler à cela. Pouvez-vous donner un contexte? –
un jour dans un futur lointain j'apprendrai toutes les manières de déclarer une fonction dans js. En a ajouté un autre aujourd'hui. Je me demande ce que d'autres leurres dans les coins sombres du web ...: D –