2009-04-15 11 views
5

Jeśli umieściłem plik JavaScript na stronie HTML, czy zmienne zadeklarowane w moim pliku JavaScript mają także zakres w moich znacznikach <script /> na mojej stronie HTML? Na przykład w moim dołączonego pliku JS, zadeklarować zmienną:HTML JavaScript Włącz zmienny zakres pliku

var myVar = "test"; 

Następnie wewnątrz mojej stronie HTML, co będzie produkować (jeśli jest to po moim zawierać znacznika script)?

alert(myVar); 

Odpowiedz

14

Jeśli zadeklarujesz zmienną poza jakąkolwiek funkcją jak

var myVar = 'test'; 

lub dowolny lokalizacja jak

myVar = 'test'; 

lub

window.myVar = 'test'; 

Należy dodać do globalnego obiektu (okno) i być dostępny wszędzie jako

alert(myVar); 

lub

alert(window.myVar); 

lub

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

Nawet z dołączonym plikiem JavaScript? –

+0

Yup. Wypróbuj: test.html: test.js: Test var = 'hello!'; umieść te dwa pliki w tym samym folderze i załaduj stronę html. to działa! –

+1

hmm, który nie był ładnie sformatowany, ale mam nadzieję, że wpadniesz na ten pomysł. –

3

To będzie produkować alert zawierający "test" .

Wszystkie zmienne zadeklarowane na najwyższym poziomie w JavaScript mają ten sam zakres. Jeśli chcesz używać zmiennych w jednym pliku, który nie będzie kolidować z innym, a następnie można użyć anonimową funkcję do wprowadzenia nowego zakresu:

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

zmienił: jak BYK zwraca uwagę, można to rozszerzyć w coś, co przypomina pełną nazw rozwinięty, przypisując obiekt dosłowny:

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

Można również użyć "przestrzeni nazw", która jest po prostu statycznym obiektem do grupowania zmiennych i funkcji. – BYK

1

Kiedy deklarujesz zmienną lub funkcję w kodzie, jesteś tworząc własność window. Rozważmy następujące przykłady:

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

Jeśli zadeklarujesz zmienną wewnątrz funkcji, zmienna nie będzie dostępna z zewnątrz, chyba że dodasz go do obiektu 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 

Zatem twój przykład alarmuje test.