13 votes

Erreur JS 'redeclaration' de var lorsqu'elle est en première ligne du programme?

SCRPT5039: Redéclaration de la propriété const ligne 1 caractère 1

line1: var editObj = null;

Ceci est le début du fichier et j'ai vérifié pour m'assurer que la variable n'est pas dans d'autres fichiers js appelés. Est-ce que cela signifie que je la redéclare plus tard ? (si oui, cette référence de ligne n'est pas utile) ou quel est le problème avec cela ?

6voto

curtwilliams Points 31

J'ai obtenu cette erreur avec le code suivant:

var window;

J'avais ajouté cette déclaration pour contourner une erreur de noeud lors de l'utilisation du code suivant:

if (!window) {
  //trucs spécifiques au noeud
}

Sans la déclaration ci-dessus, le noeud se plaindrait. En fin de compte, j'ai choisi de copier/coller plutôt que d'essayer de partager le même fichier exact entre les implémentations de noeud et de navigateur.

4voto

Chris Tolworthy Points 406

MODIFICATION : Corrigée. Du moins, pour moi. J'ai eu cette erreur avant l'erreur de re-déclaration :

HTML1113: Mode de document redémarré de Quirks à IE9 Standards 

Cela suggère qu'IE trouve ce qu'il pense être une erreur, donc recharge la page à nouveau en mode Quirks. Recharger la page deux fois lui fait penser que tout est déclaré deux fois. La solution est donc de trouver ce qu'IE n'a pas aimé.

Tout d'abord, j'ai passé la page à travers le validateur HTML en ligne. Ensuite, j'ai passé mon javascript à travers jsLint. Après tout cela, IE9 semblait être content. Et en prime, j'ai un code de meilleure qualité. J'espère.

3voto

Richard Wiseman Points 388

J'ai eu un problème similaire avec la même erreur, mais ma première ligne de code était un alert(0); que j'avais inséré pour m'assurer que le script était chargé! Curieusement, le script avait bien été chargé selon les outils de développement d'IE9, mais la première ligne n'avait jamais été exécutée et l'erreur pointait vers ce alert(0); comme une redéfinition. J'ai même inséré des lignes et des espaces avant et le numéro de ligne et de caractère changeait en conséquence. Cependant, ce n'était manifestement pas la chose qui avait été redéfinie car ce n'est même pas une déclaration, encore moins une redéclaration!

J'ai supprimé des morceaux de fin de script jusqu'à ce que le alert(0); soit exécuté (indiquant que le script avait bien été chargé et analysé avec succès) et j'ai découvert que la ligne incriminée était :

var screen;

Il s'avère qu'IE9 a déjà un window.screen avec lequel cette déclaration entrait en conflit, et en renommant mon screen en eScreen, le problème a été résolu.

Donc, ma réponse est : ne pas se fier aux indications d'IE9 sur la localisation de la redéclaration!

(Il est également bon de noter que le script fonctionnait très bien dans sa forme originale sur IE7, IE8 et IE10, mais pas sur IE9.)

1voto

jcubic Points 11141

J'ai eu le même problème dans mon code et il s'est avéré qu'IE montre la mauvaise ligne où la redéclaration apparaît. Dans mon cas, c'était l'historique que j'utilise plus tard dans le code. Vous devriez vérifier tout le code pour les redéclarations des constantes. Vous pouvez essayer de commenter une partie du code et voir quand il lance cette erreur.

1voto

Rajdeep Points 579

L'erreur survient car vous avez déclaré une variable globale/locale qui correspond à une propriété par défaut du navigateur. Quelque chose comme

var window = '';
var navigator = '';

Essayez de supprimer/de commenter une telle déclaration et observez les effets.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X