2017-02-09 3 views
1

lassen Sie uns sagen,Ruft ein Funktionsaufruf in Javascript irgendeine Objekterstellung auf?

function f(){} 

f(); 

Wenn die Funktion f() eine Funktion Objekt wird im Speicher erzeugt (zusammen mit seinem Prototyp-Objekt) definiert ist

Wird die Ausführung der Funktion weiter keine neuen Objekte erstellen? Wenn ja, was ist es?

EDIT:

Ich versuche, das Modul Muster in Javascript

function f(){ 
    var name=""; 
    out = { 
     getName: function(){return name;}, 
     setName: function(newName){name = newName} 
    }; 
    return out;}; 

var x= f(); 

var y = f(); 

Aufruf x.setName ("foo") umgesetzt zu verstehen; hat keinen Einfluss auf den Wert von y.getName()

Wo ist eigentlich der Variablenname für x und y gespeichert, wenn nicht in einem Objekt?

+0

Der Konstruktormodus der Funktionsausführung erstellt auf jeden Fall ein neues Objekt. Wird der Nicht-Konstruktor-Modus der Funktionsausführung, d. H. F(), irgendein neues Objekt erzeugen? –

+0

sollte mit den Profilierungsinstrumenten von Chrome einfach zu überprüfen sein. – alebianco

+0

Von dem, was mir gesagt wurde, ist das Schließen eines Streams nach dem Deklarieren von '' f'' ein ''() '' neben einer Funktion/Routine zu öffnen. – Crowes

Antwort

1

Ihre bearbeitete Frage unterscheidet sich grundlegend von der ersten Version. In diesem Fall erstellen Sie bei jeder Ausführung von f explizit ein neues Objekt. Das zurückgegebene Objekt ist jedes Mal anders. Wenn Sie also tun

var x= f(); 

var y = f(); 

x unterscheidet sich von y.

+0

Ich entschuldige mich. Jetzt verstehe ich, ich habe nicht die richtige Frage gestellt. Ich werde eine neue Frage stellen. Danke für die Hilfe –

+0

egal, herzlich willkommen! Markieren Sie die Antwort als gelöst, wenn es ist :) –

1

In der Tat wird die Funktion Definition ein Objekt mit den Variablen in seinem Bereich erstellen und dieses Objekt zu seiner Umfangskette hinzufügen. Bei der Ausführung ruft sie ihre Gültigkeitsbereichskette auf und fügt sie dem aktuellen Gültigkeitsbereich hinzu (der Umfangskette der Funktion, in der sie aufgerufen wird, die bereits existiert). Wenn Sie keine Funktion aufrufen, wird kein Objekt erstellt.

+0

Ich versuche, das in Javascript implementierte Modulmuster zu verstehen ......... function f() {var name = ""; out = {getName: function() {return name;}, setName: funktion (neuerName) {name = neuerName}}; zurückgeben;}; var x = f(); var y = f(); .............. Aufruf von x.setName ("foo"); hat keinen Einfluss auf den Wert von y.getName() ..... wo ist eigentlich der Variablenname für x und y gespeichert, wenn nicht in einem Objekt –

+0

beabsichtigen bitte .. –

+0

Ich versuche zu verstehen, das Modul-Muster in Javascript implementiert 'function f() { var name =" "; out = {getName: function() {return name;}, setName: funktion (neuerName) {name = neuerName}}; zurückgeben;}; var x = f(); var y = f(); ' Aufruf von x.setName (" foo "); hat keinen Einfluss auf den Wert von y.getName() ..... wo ist eigentlich der Variablenname für x und y gespeichert, wenn nicht in einem Objekt –

Verwandte Themen