web-dev-qa-db-fra.com

Fonctions vides en Javascript

Si j'ai quelque chose comme ça:

var blah = function() { };

et plus tard dans le code blah est utilisé, quel est l'indicateur JSLint qui dit de supprimer le bloc vide? 

26
user1899082

Je ne sais pas ce que jsLint pense, mais s'il s'agit d'un problème et que vous avez besoin d'une solution, vous pouvez procéder de la manière suivante: 

var blah = function() { return undefined; }; // or just return;

Mise à jour: Je pense que la variable Bergi est correcte car, sur le jslint site de la section Required Blocks:

JSLint s’attend à ce que si, tant que, faire et pour les déclarations soient faites avec blocks {c'est-à-dire, avec des instructions entre accolades} .JavaScript permet un if si être écrit comme ceci: if (condition) instruction; Ce formulaire est connu pour contribuer aux erreurs dans les projets où beaucoup de programmeurs sont travailler sur le même code. C'est pourquoi JSLint attend l'utilisation d'un bloc:

if (condition) { statements; }

L’expérience montre que cette forme est plus résistante.

Donc, il vérifie probablement que les blocs vides { } et invalide la fonction vierge.

27
The Alpha

Si vous demandez quelle option JsLint désactive cet avertissement, c’est: "debug: true"

Bizarrement, les docs ne font aucune référence à ce comportement:

"Tolérer les instructions du débogueur" | debug | Les instructions true if debugger doivent être autorisées. Définissez cette option sur false avant de passer en production.

Mais si vous regardez le code , vous pouvez voir qu'il ne vous avertira pas avec l'option de débogage définie sur true:

function block(kind) {
    // A block is a sequence of statements wrapped in braces.

    ...

    if (kind !== 'catch' && array.length === 0 && !option.debug) {
        curly.warn('empty_block');
    }
    ...
}
5
Mat

Beaucoup de vérificateurs de code vérifient ce genre de chose. Cela ne signifie pas que vous devriez jamais avoir des blocs de code vides. Parfois, il y a des raisons valables de les avoir. Mais cela souvent signifie que le programmeur a simplement oublié d'écrire l'implémentation. :)

Ce que j'aime faire, c’est d’ajouter un commentaire dans le corps de la fonction, expliquant pourquoi elle est vide. Cela devrait supprimer l'avertissement, mais cela peut ne pas être le cas si le vérificateur de code considère un bloc de code avec un commentaire "vide".

var blah = function() { /* empty because ... */ };
4
Michael

Si vous avez l'intention d'utiliser la fonction en tant que constructeur avec l'opérateur new:

// Returns the instance that was just created with the new operator.
var ClassLikeFunction = function(){
    return this; 
};

Par contre, si est intentionnellement une fonction vide sans valeur de retour:

// Returns the same value as a function that returned nothing.
var blankFunction = function(){
    return undefined; 
};
3
Aaren Cordova

Ce

{
    ...
}

est considéré comme un bloc de code et l'indicateur vous indique qu'il est vide (il ne contient aucune commande). Vous n'avez pas besoin de l'enlever, comme @ Katana314 l'a dit, cela pourrait être intentionnel.

1
jacobianism

Utilisez l'expression lambda:

const blah = () => void 0;

Cela fera comprendre que blah est une fonction vide qui renvoie undefined.

1
splintor

ce qui m'a laissé à cette question est que j'avais une fonction vide dans mon espace de noms 

et quand j'ai appelé cette fonction, et 

TypeError: MyNamespcae.myFunction is not a function

alors ne créez pas de fonction vide, ajoutez au moins une instruction comme void (0); ou retourne null;

0