2016-11-26 6 views
0
<!DOCTYPE html> 
    <html> 
    <body onload="myFunction()"> 
    <script> 
    var go="globle"; 
    function myFunction() { 
    var go="local"; 
    document.write(go); 
     } 
    document.write(go); 
    </script> 

    </body> 
    </html> 

, wenn ich diesen Code ausführen druckt es local.But wenn ich den folgenden Code ausführen:Ich versuche diesen JavaScript-Code zu verstehen, aber satt?

<!DOCTYPE html> 
    <html> 
    <body onload="myFunction()"> 
    <script> 
    var go="globle"; 
    function myFunction() { 
    var go="local"; 
     } 
    document.write(go); 
    </script> 

    </body> 
    </html> 

Dieser Code Druck globle. Warum nicht der erste Code sowohl lokal als auch global drucken. Und auch wenn ich ersten Code ausführen, wird auch mein HTML-Body nicht ausgeführt.

Antwort

1

Sie verwenden document.write, das löscht alles beim Aufruf.

Die Methode write() hauptsächlich zum Testen verwendet wird: Wenn es nach einem HTML-Dokument vollständig geladen ist, verwendet wird, wird es alle vorhandenen HTML löschen.

Ändern Sie es console.log (go) und Sie werden die erwartete Ausgabe sehen.

+0

Dies ist hier nicht der Fall, document.write wird im zweiten Beispiel nie für go = "local" aufgerufen. – Gerrit0

+0

@ Gerrit0 'document.write()' ist ein Problem im ersten Beispiel, weil die Ausgabe 'globallocal' sein sollte und stattdessen das OP nur' local' erhält, weil die 'globale' Ausgabe von der' local' Ausgabe überschrieben wird . –

+0

Sie sind richtig, sorry, anscheinend habe ich die Frage falsch verstanden und fälschte es für ein Problem mit dem Umfang. – Gerrit0

1

Ihr erstes Beispiel ist wegen der Verwendung von document.write fehlerhaft. Wenn Sie das NACH dem Erstellen eines Dokuments verwenden, löscht es das frühere Dokument und schreibt ein neues Dokument. Die Ergebnisse, die Sie am ersten Beispiel gesehen haben, wurden dadurch verzerrt.

Wirklich, zeigen Ihre Beispiele nur Global vs. Function in JavaScript. Alles, was mit var in einer Funktion deklariert wird, hat einen lokalen Gültigkeitsbereich für diese Funktion und wird aus dem Speicher entfernt, wenn die Funktion, für die es deklariert ist, beendet wird oder nicht länger im Speicher gehalten wird.

auf die Kommentare Schauen Sie ich auf Ihre leicht modifizierten Code hinzugefügt haben:

// We are going to replace all the document.write() calls with 
 
// console.log() calls because you are experiencing information being 
 
// written to the document and then the document is being overwritten 
 
// with new information. 
 

 
// The result will be "global, local" because the code in "myFunction" is 
 
// not going to run until the window is loaded. The last line of code in 
 
// this example will actually run first. 
 
window.onload = myFunction; 
 

 
var go="global"; // Just declare a Global variable (available everywhere) 
 

 
function myFunction() { 
 
    // Declare a local variable, available only in the function 
 
    // Since this variable uses the same name as the global one 
 
    // when this function is executing, this variable will override 
 
    // (hide) the other one. 
 
    var go= "local"; 
 
    
 
    console.log(go); // The local one is used 
 
} 
 

 
// Now, we are outside the function and the local version of "go" is 
 
// out of scope. It's gone and can't be accessed. But, the global version 
 
// is still available 
 
console.log(go); // The global one is used

Hier ist Ihr zweites Beispiel:

// Again, we're replacing document.write with console.log 
 

 
// Even though we're calling the "myFunction" function when the 
 
// window is loaded, that function only sets a local variable 
 
// that will be destroyed when the function ends. It never does 
 
// anything with that variable. 
 
window.onload = myFunction; 
 

 
var go="global"; 
 

 
function myFunction() { 
 
    // This will be destroyed as soon as the function is done 
 
    // which is the line right after it gets declared! 
 
    var go="local"; 
 
} 
 

 
// Again, the scope of this line of code is global and so the global value is used 
 
console.log(go);

+0

danke @ScottMarcus Ich habe den Punkt bekommen –

Verwandte Themen