Antwort

1

Die Funktion wird nicht überschrieben, sie weist dieser Variablen jedoch eine Zeichenfolge zu. Die in der ersten Zeile definierte Funktion gibt eine Zeichenkette zurück, und da die zweite Zeile spam gleich dem Rückgabewert setzt (da die Funktion aufgerufen wird (beachten Sie die Klammern)) ist spam dann eine string.

Versuchen Sie dies in der Browser-Konsole: window.spam. Nach der ersten Zeile sollte diese Funktion sichtbar sein. Dann sollte nach der zweiten Zeile diese Zeichenfolge angezeigt werden.

function spam() { 
 
    return "spam 'n eggs"; 
 
} 
 
console.log('typeof spam: ',typeof spam, 'typeof window.spam: ',typeof window.spam); 
 
spam = spam(); //spam is assigned a string 
 
console.log('typeof spam: ',typeof spam, 'typeof window.spam: ',typeof window.spam); 
 
spam(); // TypeError: spam is not a function.

wenn wir diesen Code in einer Funktion bewegt, das var Schlüsselwort könnte für einen lokalen Gültigkeitsbereich verwendet werden:

function assignSpam() { 
 
     var spam = function() { return "spam 'n eggs"; } 
 
     console.log('typeof spam after initial assignment: ',typeof spam); 
 
     spam = spam(); //spam is assigned a string 
 
     console.log('typeof spam after assigning to spam(): ',typeof spam); 
 
     spam(); // TypeError: spam is not a function. 
 
    } 
 
    assignSpam(); 
 
    spam; //undefined

Die Ergebnisse sollten in ähnlich sein serverseitiges Javascript (zB NodeJS).

+0

Dies war nicht ganz das, was ich mit überschreiben meinte (siehe Bearbeiten), aber beantwortet meine Frage dennoch. – JeremiahB

1

Hat überschreiben dieser Code die durch eine globale Variable gehalten Funktion Spam genannt,

Nr Der Anfangswert zugewiesen Spam ein Verweis auf die Funktion ist. Das Zuweisen eines neuen Werts ändert die Funktion nicht, es weist spam nur einen neuen Wert zu.

z.

function spam(){return 'I am spam';} 
 

 
var b = spam; 
 

 
spam = spam(); 
 

 
console.log(spam) // 'I am spam' 
 

 
console.log(b); // Original "spam" function 
 

 
console.log(b()); // 'I am spam'

oder eine implizite globale Variable erstellen, die die Funktion Spam Schatten?

Es weist spam nur einen neuen Wert zu. Das ursprüngliche Funktionsobjekt ist weiterhin vorhanden. Wenn jedoch keine weiteren Verweise darauf vorhanden sind, ist es für die Garbage Collection verfügbar.

Verwandte Themen