Hi!
Funktionen geben keine Variablen zurück sondern Werte.
Hm nein, das stimmt so nicht, JavaScript gibt eine Referenz auf das Objekt zurück (was ja eher einer 'variable' entspricht die man verändern kann als einem Wert der unveränderlich ist), siehe:
Ein Objekt ist keine Variable, auch eine Referenz nicht. Wohl aber können Variablen Objekte und Referenzen enthalten oder andersrum formuliert Objekte und Referenzen darauf in Variablen abgelegt werden. Andererseits können Objekte und Referenzen völlig ohne Variablen leben.
function foo(a) {
a.c = 3
setTimeout(function() { console.log(a.c) }, 500)
return a
}
In a ist eine Referenz auf ein Objekt enthalten. Und es wird diese Referen auf das Objekt zurückgegeben. Die Variable a spielt außerhalb der Funktion keine Rolle.
var a = {b:1,c:2}
Das ist ein anderes a. als das in der Funktion.
var r = foo(a)
Dass du es hier eine Variable a mit einer Referenz auf ein Objekt drin der Funktion übergibst, die diese Referenz in einer lokalen Variablen namens a ablegt, liegt an deiner Benennung. Du könntest das globale a auch anders nennen.
console.log(r.c)
r.c = 4
Alle drei, das globale a, das lokale a und das globale r zeigen auf das selbe Objekt. Es wird lediglich eine Referenz auf das Objekt weitergereicht oder eine Kopie der Referenz erstellt, wenn diese in einer weiteren Variable abgelegt werden soll.
Lo!