JavaScript: Deux scripts séparés - partager des variables?
Si j'ai deux scripts dans une page HTML avec JavaScript sont des variables partagées entre l'ensemble de la page? Ou seulement à l'intérieur de leur propre déclarations?
Exemple:
<script> var title = "Hello World!"; </script>
//random HTML/PHP
<script> document.write(title); </script>
Sera que d'écrire "Hello World!"?
Cela semble être une mauvaise convention de codage comment pourrais-je obtenir quelque chose comme ceci avec une bonne forme.
source d'informationauteur Bobby S
Vous devez vous connecter pour publier un commentaire.
Variable de titre dans votre exemple est déclarée comme une variable globale, il sera donc à la disposition de tout et de tous les scripts chargés dans la même page. Quoi de plus, si il y a déjà une variable globale nommée
title
sur la même page, sa valeur sera écrasée lorsque vous affectez-lui la valeur "Hello World!"La pratique habituelle pour éviter ce genre de problème est de déclarer exactement une variable globale, puis mettez tous vos autres variables à l'intérieur. Par exemple:
Attribuer cette seule variable globale un nom que personne d'autre est susceptible de choisir, telles que votre nom ou le nom de l'employeur ou le meilleur de tous, un nom de domaine qui vous appartient à vous ou à votre employeur.
Un autre, plus commune façon de traiter ce problème est de prendre avantage de la manière que JavaScript gère la portée des variables dans les fonctions. Par exemple, créer une fonction anonyme, déclarer tous de votre code à l'intérieur de cette fonction, puis d'appeler la fonction à la fin de la déclaration en mettant () à la fin de la déclaration. Par exemple:
Si vous voulez de partager certaines variables, mais pas les autres, votre fonction anonyme utilisation d'une combinaison d'approches:
Une note finale. Toutes les fonctions de votre code déclare sont aussi des variables globales. Donc, si vous créez une fonction nommée printTitle, c'est 1) la disposition de tous les autres code sur la page et 2) pourrait remplacer ou être remplacée par une autre fonction sur la même page, également nommé printTitle. Vous pouvez protéger et/ou exposer votre fonctionne de la même manière que vous le feriez pour tout autre variable:
Noter que, bien que la fonction addOne est effectivement une fonction privée à l'intérieur de la clôture, elle est toujours accessible indirectement, via la printTitle fonction car addOne, et elle printTitle sont tous deux dans le même champ d'application.
title
est dans leGlobal
la portée, ce qui, dans le cas de JavaScript s'exécutant dans un navigateur web, est lawindow
objet. Quand vous ditesvar title = "Hello World!"
en dehors de toute fonction qui permettrait de limiter son champ d'application, c'est la même chose que de direwindow.title = "Hello World!"
.Votre code est équivalent à ceci:Ils vont tous être "partagé" en conformité avec les règles de portée et de ces. Fichiers distincts a aucun effet sur ce à l'EXCEPTION de l'ordre de l'inclusion de ces fichiers.
Edit: La même règle s'applique aux commandes de scripts.
Et de donner des précisions sur l'exception:
Si j'ai le fichier Foo où je déclare ce qui suit:
var fooVar = barVar;
Puis-je avoir le fichier Bar où je déclare ce qui suit:
var barVar = 'bar';
Et je les inclus dans cet ordre:
Vous obtiendrez un interprétée erreur parce que l'utilisation de
barVar
vient avant sa déclaration.Dans ce cas, le titre serait une variable globale. Vous avez besoin d'encapsuler la variable dans un champ. Il existe différentes méthodes pour le faire. Ma préférence est une auto-exécution de la fonction anonyme, ce qui serait fait comme suit:
La
window
détient toutes les variables. Tous les scripts sont dans la mèrewindow
objet. Si toutes les variables sont dans un même espace. Ils peuvent, toutefois, être localisés à des fonctions, etc.