Le code suivant passe comme jslint: 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';
5 Réponses :
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: p>
Pour éviter ces erreurs JSlint, vous pouvez P>
Définissez toutes les variables ensemble p>
Utilisez JSlint Directive var sgreeting = 'Hello World', A, B, C; Code> P> Li>
Tolérer de nombreuses instructions de VAR par fonction CODE> P> LI>
ol>
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 em> 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 em> à l'intérieur de la fonction. P>
Vous devez placer 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 em>, pas définir em>. Il suffit d'écrire var a, b, c code> en haut de la fonction, puis Attribuez em> à eux dans votre instruction de commutation. P>
var a, b, c; code> apporte les trois variables dans l'existence avec la valeur
non définie code>. 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 code> au milieu de la fonction est implicitement déclarée et définie sur
non défini code> 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. P>
"Si je suis JSLINT, je définirais des variables qui n'ont jamais besoin d'être utilisées." em> p>
Si vous le faites votre chemin et ignorez JSlint, vous définissez toujours des variables qui peuvent ne jamais être utilisées. P>
La raison en est que Javascript traite tous les déclarations 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 code> var code>), puis affectez les valeurs. à tout moment vous aimez. p> var code> 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 em>
code> (ou
si code> ou
pour code> 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"; code> la valeur sera attribuée. P>
Utilisez le vars code> option
pour permettre tranquillement cette utilisation de var code>. p>
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 * / code>