Ich dachte, pass-by-reference heißt eben, wie er auch sagt, einen Pointer übergeben. Wenn ich in PHP &$var übergebe, dann kann ich genau diesen Effekt ja erzielen, dass ich eben einen Verweis/Referenz habe auf die Variable in der Funktion und somit an der Variablen Änderungen vornehmen kann.
Damit hast du völlig Recht. Es ist irreführend zu sagen, dass JavaScript pass by reference macht. Lies dir mal diesen Thread durch:
</archiv/2010/10/t200805/#m1353932>, speziell </archiv/2010/10/t200805/#m1354040>
JavaScript macht weder striktes pass by reference noch striktes pass by value. Der Artikel [http://dmitrysoshnikov.com/ecmascript/chapter-8-evaluation-strategy/] erklärt die Unterschiede sehr gut. Dort wird das Verhalten von JS »call by sharing« bzw. »call by value where value is the reference copy« genannt.
<?php
$var = "start";
function ref(&$var) {
$var = "ref";
}
echo $var; // start
ref($var);
echo $var; // ref
So etwas geht nicht in JavaScript. Eine JavaScript-Funktion kann nie den Wert einer Variable ändern, die von außen in die Funktion hineingegeben wurde. Eine Swap-Funktion ist daher in JavaScript nicht möglich. Das wäre, was m.W. nötig wäre, um von pass by reference sprechen zu können.
my_object = {
blah : "blah"
}
function storer(obj, name) {
return function (result) {
obj[name] = result;
};
}
my_inputs = "newInput";
do_it(my_inputs, storer(my_object, 'blah'));
alert(my_object.blah); //newInput
>
> setzt my\_object.blah in dem Fall wohl auf die neue Var, weil das Objekt bzw. die Variable global ist?
Nein, das hat nichts damit zu tun, dass das Objekt global it. Das ist ein ganz anderer Fall. Wie Cheatah sagst änderst du hier die Eigenschaft eines Objekts, auf dass du durch eine Closure Zugriff hast.
Mathias