11
votes

Jslint - Problèmes déclarant des variables

Le code suivant passe comme jslint: xxx pré>

Cependant, une fois que j'ai mis ce code dans une fonction, Jslint se plaint que je devrais combiner ... avec la déclaration "VAR" précédente . Code> Si je suis JSLINT, je définirais des variables qui peuvent ne jamais avoir besoin d'être utilisées. Comment devrais-je traiter ce problème? Strong> Voici le code suivi des erreurs de Jslint: P>

function foo()
{
    'use strict';
    var sGreeting = 'hello world';

    switch (sGreeting)
    {
    case 'Hello world!':
        var a = 'some a value';
        break;
    case 'Kamusta mundo!':
        var b = 'some b value';
        break;
    case 'Salut le Monde!':
        var c = 'some c value';
        break;
    default:
        break;
    }
}


Error:
Problem at line 9 character 7: Combine this with the previous 'var' statement.
var a = 'some a value';

Problem at line 12 character 7: Combine this with the previous 'var' statement.
var b = 'some b value';

Problem at line 15 character 7: Combine this with the previous 'var' statement.
var c = 'some c value';


0 commentaires

5 Réponses :


20
votes

La seule portée de JavaScript est la portée fonctionnelle (les accolades ne fournissent pas de portée), de sorte que les VARS dans l'instruction de commutation sont en train d'être hissé au sommet de la fonction.

Qu'est-ce que Jslint suggère est ceci: xxx


0 commentaires

3
votes

Pour éviter ces erreurs JSlint, vous pouvez

  1. Définissez toutes les variables ensemble

    var sgreeting = 'Hello World', A, B, C;

  2. Utilisez JSlint Directive Tolérer de nombreuses instructions de VAR par fonction


0 commentaires

2
votes

La raison en est que JavaScript n'a pas de périmètre de bloc; Il a des globaux et des locaux seulement. Jslint ne se soucie pas des variables globales déclarées nulle part, mais pour les variables locales l'histoire est différente. En effet, une variable locale déclarée n'importe où au milieu d'une fonction est réellement disponible partout à l'intérieur de la fonction.

Vous devez placer var a, b, c en haut de la fonction, puis Attribuez à eux dans votre instruction de commutation.

sur votre préoccupation concernant la définition de variables qui pourraient ne jamais être utilisées, ce n'est pas vraiment un problème dans JavaScript. D'une certaine manière que vous n'êtes vraiment que déclarer , pas définir . Il suffit d'écrire var a, b, c; apporte les trois variables dans l'existence avec la valeur non définie . En fait, la façon dont vous avez écrit votre code, vous obtenez le même effet! Toute variable locale que vous définissez avec var au milieu de la fonction est implicitement déclarée et définie sur non défini en haut de l'organisme de fonction de toute façon. Il est considéré que beaucoup d'être une bonne pratique de programmation pour rendre cette déclaration explicite.


0 commentaires

17
votes

"Si je suis JSLINT, je définirais des variables qui n'ont jamais besoin d'être utilisées."

Si vous le faites votre chemin et ignorez JSlint, vous définissez toujours des variables qui peuvent ne jamais être utilisées.

La raison en est que Javascript traite tous les déclarations var dans une fonction comme si elles se sont produites en haut de la fonction, même si vous pensiez déclarer la variable (s) Dans une logique conditionnelle telle que dans un cas spécifique (ou si ou pour ou autre). C'est ce qu'on appelle "hostillement". Les valeurs réelles sont ensuite attribuées aux variables au point du code dans lequel vous avez fait votre mission. C'est-à-dire que les variables "hostées" obtiennent une valeur non définie initialement, puis au point du code où vous avez eu votre var a = "quelque chose"; la valeur sera attribuée.

de sorte que les autres réponses a déclaré, vous pouvez obtenir votre code pour réussir JSLint en déclarant les variables en haut de la fonction (Sépablation de la virgule avec une seule instruction var ), puis affectez les valeurs. à tout moment vous aimez.


0 commentaires

0
votes

Utilisez le vars option pour permettre tranquillement cette utilisation de var .


2 commentaires

Ce lien me donne juste un 404


Il est difficile de trouver une référence pour l'ancienne version de Jslint, donc je laisse cela ici: / * jslint vars: true * /