Sie weisen den Wert einer anonymen Funktion einer Variablen und nicht einem Zeiger zu.
Wenn Sie mit Zeigern spielen möchten, können Sie Objekte verwenden, die als Referenz übergeben werden und nicht kopieren.
Hier sind einige Beispiele:
"obj2" ist eine Referenz von "obj1", Sie ändern "obj2" und "obj1" geändert wird. Es wird alarmiert false
.
var obj1 = {prop:true},
obj2 = obj1;
obj2.prop = false;
alert(obj1.prop);
„prop“ verweist auf eine Eigenschaft, die nicht ein Objekt ist, „prop“ ist nicht ein Zeiger auf dieses Objekt, sondern eine Kopie. Wenn Sie "prop" ändern, wird "obj1" nicht geändert. Sie werden alarmiert true
var obj1 = {prop:true},
prop = obj1.prop;
prop = false;
alert(obj1.prop);
"obj2" ist ein Verweis auf die "subobj" Eigentum "obj1". Wenn "obj2" geändert wird, wird "obj1" geändert. Es wird alarmiert false
.
var obj1 = {subObj:{prop:true}},
obj2 = obj1.subObj;
obj2.prop = false;
alert(obj1.subObj.prop);
warum eine Kopie des Wertes übergeben wird, wenn Funktionen nicht primitive Typen sind? – thed0ctor
Nevermind, das wird unten beantwortet: http://StackOverflow.com/a/11598151/1316465 – thed0ctor
Nur für die Klärung des letzten Satzes dieser Antwort, nicht vergessen, dass der "Wert von bar" ist ein "Zeiger auf die Funktion", nicht die Funktion selbst. Also, nach 'foo = bar', erhält foo eine Kopie -by-Wert- dieses Zeigers, so dass sowohl foo als auch bar auf das eigenständige Funktionsobjekt zeigen. – drodsou