2009-04-15 9 views
5

Si j'inclue un fichier JavaScript dans ma page HTML, les variables déclarées dans mon fichier JavaScript ont-elles aussi une portée dans mes balises <script /> dans ma page HTML? Par exemple, dans mon dossier JS inclus, je déclare une variable:HTML JavaScript Include Inclure la portée du fichier

var myVar = "test"; 

Puis dans ma page HTML, ce qui va ce produit (si c'est après ma balise include script)?

alert(myVar); 

Répondre

14

Si vous déclarez la variable en dehors de toute fonction comme

var myVar = 'test'; 

ou à tout endroit comme

myVar = 'test'; 

ou

window.myVar = 'test'; 

Il faut ajouter à l'objet global (fenêtre) et être disponible partout comme

alert(myVar); 

ou

alert(window.myVar); 

ou

alert(window['myVar']); 
+0

Même avec un fichier JavaScript inclus? –

+0

Yup. Essayez-le: test.html: test.js: var test = 'bonjour'; mettre ces deux fichiers dans le même dossier et charger la page html. Ça marche! –

+1

hmm qui ne formatait pas très bien, mais j'espère que vous avez l'idée. –

3

Il produira une alerte contenant "test" . Toutes les variables déclarées au niveau supérieur dans JavaScript partagent la même portée. Si vous voulez utiliser des variables dans un fichier qui ne sera pas entrer en conflit avec un autre, vous pouvez utiliser une fonction anonyme pour introduire un nouveau champ:

var myVar = "something else"; 
(function() {var myVar = "test"; alert(myVar)})(); 
alert(myVar); 

modifier: Comme le souligne BYK, vous pouvez étendre cette en quelque chose qui ressemble à un espace à part entière, en attribuant un littéral d'objet:

var MyNamespace = (function() { 
    var myVar = "something"; 
    return { alert: function() { alert(myVar) }, 
      setVar: function(value) { myVar = value } } 
})(); 
+0

Vous pouvez également utiliser un "espace de nommage" qui est simplement un objet statique pour regrouper vos variables et fonctions. – BYK

1

Lorsque vous déclarez une variable ou une fonction dans votre code, vous créez une propriété de window. Considérez ces exemples:

var a = 'Cow'; 
alert(window.a); // Cow 
alert(this.a); // Cow 
alert(a); // Cow 

Si vous déclarez une variable dans une fonction, votre variable ne sera pas accessible depuis l'extérieur de celui-ci, sauf si vous ajoutez à l'objet window:

function lalala() { 
    alert(a); // still Cow 
    a = 'Pig'; // We're tired of cows by now. Let's make it a pig. 
    var b = 'Sheep'; 
} 
lalala(); 
alert(a); // Pig 
alert(b); // undefined, since b is declared in the lalala scope 

Ainsi, votre exemple alerterait test.

Questions connexes