2011-04-21 1 views
1

J'utilise hoptoad pour obtenir des rapports d'erreur de mon JavaScript et récemment je suis arrivé cette erreur:redéclaration de la console var

redeclaration of var console

le backtrace est pas très utile:

internal: : 

:0:in `{anonymous}()' 

et je sais c'est arrivé sur "Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv: 1.9.2.16) Gecko/20110323 Ubuntu/10.10 (maverick) Firefox/3.6.16" mais je ne peux pas comprendre comment la console serait être re-déclaré. As tu des idées? Voici comment je déclare la console:

if (typeof console == "undefined") { 
    var console = { 
    log: function() { 
    } 
    }; 
} 

Répondre

4

Vous ne pouvez pas conditionnellement déclarer des variables. Les déclarations sont analysées et ajoutées en tant que propriétés de l'objet d'activation avant l'exécution de tout code. Votre code est équivalent à:

var console; 
if (typeof console == "undefined") { 
    console = { 
    log: function() { 
    } 
    }; 
} 

Il est également appelé « levage » (pas un terme que je l'aime) que les déclarations sont effectivement « hissés » au sommet de la fonction ou au-dessus de tout autre code. La déclaration d'une variable plus d'une fois dans la même fonction ou dans la même portée est inoffensive, mais elle indique une mauvaise compréhension possible de la portée (par exemple, une portée de bloc attendue) ou une réutilisation involontaire d'un identificateur.

S'il vous plaît modifier pour confirmer ou infirmer cette partie:

La façon de le faire est de re-definig window.console:

if (typeof window.console == "undefined") { 
    window.console = { 
    log: function() { 
    } 
    }; 
} 
+0

+1 En ce qui concerne la solution, vous devriez vérifier et placez 'window.console' à la place. – deceze

+0

Ce forum n'est pas destiné aux conversations, il est uniquement destiné aux questions et aux réponses. Modifier les messages d'autres personnes afin de simuler le type de conversation threadée possible sur Usenet avec un bon lecteur de news ne me semble pas approprié. Si vous voulez connaître la meilleure façon d'ajouter une propriété à l'objet global/window, je vous suggère de poser une autre question avec un sujet approprié. La réponse dépend du contexte. – RobG

Questions connexes