J'ai rencontré un problème intéressant l'autre jour et je me demandais si quelqu'un pourrait faire la lumière sur pourquoi cela se produit. Voici ce que je fais (pour les besoins de cet exemple, j'ai abêtis l'exemple un peu):Javascript redéclaré variable globale remplace ancienne valeur
- Je crée une variable scope globalement en utilisant la notation carrée et le support en lui attribuant une valeur.
Plus tard, je déclare une var avec le même nom que celui que je viens de créer ci-dessus. Remarque Je n'attribue pas de valeur. Comme il s'agit d'une redéclaration de la même variable l'ancienne valeur ne doit pas être surchargée comme décrit ici: http://www.w3schools.com/js/js_variables.asp
//create global variable with square bracket notation window['y'] = 'old'; //redeclaration of the same variable var y; if (!y) y = 'new'; alert(y); //shows New instead of Old
Le problème est que l'ancienne valeur ne fait obtenir et surchargée dans le par exemple ci-dessus. l'alerte affiche 'nouveau' au lieu de 'vieux'. Pourquoi ? Sur la base de la partie de la:
je suppose une autre façon de dire ma question est de savoir comment est le code ci-dessus différents en termes de sémantique à partir du code ci-dessous:
//create global variable
var y = 'old';
//redeclaration of the same variable
var y;
if (!y) y = 'new';
alert(y); //shows Old
Update 1 commentaires et réponses Je reformule l'exemple pour mieux refléter mon problème original.
Créer 2 fichiers JavaScript avec le contenu suivant: Script1
//create global variable with square bracket notation
window['y'] = 'old';
Script2
//redeclaration of the same variable
var y;
if (!y) y = 'new';
alert(y); //shows New instead of Old in IE
Inclure ces 2 fichiers dans votre fichier html
<html>
<head></head>
<body>
<script type="text/javascript" src="my.js"></script>
<script type="text/javascript" src="my2.js"></script>
</body>
</html>
Ouverture cette page Firefox et Chrome alertes «vieux» qui est le comportement attendu. Cependant, dans IE 8 la page sera effectivement alerte 'nouvelle'
Update 2 question déplacée ici: Redeclared javascript global variable overrides old value in IE
La partie vous abêtis où tout a dû être ce code est en fonction, ce qui donne var ya différentes possibilités que window.y – kennebec
Votre mise à jour devrait être une nouvelle question, en particulier parce qu'il est spécifique au navigateur. –