Pourquoi les différences entre navigateurs subtiles dans l'objet événement

La déclaration suivante au niveau de la fenêtre:

     Événement var;  // pour IE
     Var event = "anything";  // pour Chrome

Détruira l'objet d'événement tel qu'utilisé ici:

     <Div onMouseOver = "alert (event.type);"> Surfer sur Div </ div>

Firefox ne semble pas être modifié par l'une ou l'autre déclaration.

Je me rends compte que la déclaration d'une variable avec le nom "événement" est un mauvais code, mais je suis curieux de la différence technique ici, par exemple que l'utilisation de var dans IE réinitialise la variable à nulle, alors que Chrome ne remplacera pas avec une déclaration var à moins qu'une La valeur est explicitement attribuée, et peut-être que FF détient l'objet d'événement en dehors du périmètre de validation de la fenêtre.

C'est plus une curiosité. J'ai rencontré un bug dans IE sur un site hors de mon contrôle qui a été causé par cela et plus j'ai examiné plus j'ai vu des différences subtiles entre les navigateurs. Je me demandais si quelqu'un avait des idées ici.

Dans IE, l' event est une propriété de l'objet window et est utilisé dans les fonctions des gestionnaires d'événements pour accéder à l'événement en cours de traitement. Dans d'autres navigateurs tels que Firefox, la situation est que, dans un attribut de gestionnaire d'événement, le code JavaScript dans l'attribut est appelé comme s'il forme le corps d'une fonction dans laquelle a passé un paramètre appelé event correspondant à l'événement traité . Donc dans

 <div onmouseover="alert(event.type);">Mouseover Div</div> 

Le code mouseover est effectivement

 function(event) { alert(event.type); } 

Et le paramètre d' event remplace tout event déclaré dans une portée contenant, alors que dans IE, c'est

 function() { alert(event.type); } 

Et l'identifiant de l' event est résolu comme une propriété de l'objet global (c. window d. window ).

L'objet "événement" dans IE est une propriété de l'objet "fenêtre"; C'est-à-dire global. Dans Firefox, c'est une valeur construite et transmise aux gestionnaires d'événements.

Si vous utilisez jQuery ou un autre cadre, généralement, le support de gestion d'événement normalisera l'objet "événement" dans quelque chose qui fonctionne de manière identique dans tous les navigateurs.