2016-10-14 3 views
2

Ich habe diese Aussagen auf W3Schools gefunden.Was sind globale Variablen und Fenstervariablen in JavaScript?

Mit JavaScript ist der globale Bereich die vollständige JavaScript-Umgebung. In HTML ist der globale Bereich das Fensterobjekt. Alle globalen Variablen gehören zum Fensterobjekt. Ihre globalen Variablen (oder Funktionen) können Fenstervariablen (oder Funktionen) überschreiben.

Bedeutet diese Aussage nicht, dass Global- und Fenstervariablen im Wesentlichen gleich sind? Und kann ich auf eine Fenstervariable von einem anderen Fenster aus zugreifen, da sie einem Fensterobjekt zugeordnet ist oder das Fensterobjekt gelöscht wird, wenn wir zu einem anderen Fenster navigieren? Auch

Und dieses:

Jede Funktion, einschließlich der Fenster-Objekt können Sie Ihre globalen Variablen und Funktionen zu überschreiben.

und ein zugehöriges Beispiel als:

<p> 
In HTML, all global variables will become window variables. 
</p> 

<p id="demo"></p> 

<script> 
var carName = "Volvo"; 

// code here can use window.carName 
document.getElementById("demo").innerHTML = "I can display " + window.carName; 
</script> 

Was ist ein Fensterobjekt/Variable und wie sie von den globalen Objekt/Variable unterscheiden?

Ich bin wirklich verwirrt. Kann jemand bitte dies mit einem Beispiel ausarbeiten?

+3

Dies soll helfen, für diese Frage empfehlen: http://stackoverflow.com/questions/3473946/what-is-the-difference-between -window-window-top-and-window-parent – Rajesh

+1

Ich denke, das ist nur eine Frage der unvollständigen oder unglücklichen Formulierung seitens w3schools.Was sie sagen wollen, ist, dass Javascript als Sprache den Begriff eines "globalen Kontexts" hat. Wenn JavaScript an einen * spezifischen * Kontext gebunden ist, z. B. an eine Webseite, wird dieser globale Kontext an das Fensterobjekt angehängt. Verschiedene Umgebungen, die Javascript verwenden, können diesen globalen Bereich domänenspezifisch offenlegen. –

+4

Wirklich, vermeiden W3Schulen zum Lernen Js. – Bergi

Antwort

2

Der gesamte JavaScript-Code wird in einer Umgebung ausgeführt, am häufigsten in einem Browser. Der Code, der ausgeführt wird, muss in einem "root" -Scope ausgeführt werden, der als globaler Kontext oder globaler Bereich bezeichnet wird (man denke an ihn als Hauptcontainer). In Ihrem Browser ist dieser Bereich "root" das Fensterobjekt (eindeutiges Fensterobjekt pro Registerkarte/Seite/iframe).

Deshalb, wenn in dem Beispiel eine Variable im globalen Gültigkeitsbereich var carName = "Volvo"; deklariert wird, können Sie auf diese Variable auf dem Fensterobjekt window.carName zugreifen, weil in dem Objekt 'window' das globale Objekt durchsuchen.

Wenn Sie Javascript mit Knoten zum Beispiel ausführen, ist das globale Objekt sehr passend global und in dieser Umgebung, wenn Sie var carName = "Volvo"; deklarieren, können Sie auch auf die Variable mit global.carName zugreifen.

Um dies näher auszuführen:

var myObject = { }; 
myObject.myVariable = 1; 
console.log(myObject.myVariable); // logs 1 

myVariable auf myObject erstellt, wird dies ausdrücklich getan.

var myVariable = 1; // behind the scenes this declerations is doing window.myVariable = 1; 
console.log(window.myVariable); // logs 1 

myVariable wird implizit auf das window Objekt erstellt, die im Rahmen eines Browsers das globale Objekt ist.

Ich hoffe, dies klärt die Situation.

Für vielleicht eine bessere Erklärung ich dieses Buch Serie stark https://github.com/getify/You-Dont-Know-JS speziell https://github.com/getify/You-Dont-Know-JS/blob/master/scope%20&%20closures/README.md#you-dont-know-js-scope--closures