jobo: pass by reference - verständnisproblem

Beitrag lesen

Hallo,

Douglas Crockford schreibt: "JavaScript is a Pass By Reference language. That means that when you pass a value to a function, you're not passing a copy of it and you're not passing the name of it, you're passing a reference to it. In oldspeak that would be a pointer. Sometimes it's a little confusing when values are mutable, as some JavaScript values are, and Pass by Value and Pass By Reference look the same, but JavaScript is a Pass By Reference system as most systems are today."

Und hat Beispiele dafür:

  
variable = {};  
a = variable;  
b = variable;  
alert(a === b); //true  
  
function funky (o) {  
	o = null;  
}  
var x = {};  
funky(x);  
alert(x); // Object!!!  
//////////////////////  
  
function swap(a, b) {  
	var t = a;  
	a = b;  
	b = t  
}  
var x = 1, y = 2;  
swap(x, y);  
alert(x); // 1!!  
  

Dass a ==== b ist leuchtet ein. Aber warum ändern die beiden folgenden Funktionen nicht den Wert von x??? 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.

  
<?php  
$var = "start";  
function ref(&$var) {  
	$var = "ref";  
}  
function noref($var) {  
	$var = "noref";  
}  
echo $var; // start  
noref($var);  
echo $var; // start  
ref($var);  
echo $var; // ref  

Was kapiere ich hier falsch?

  
  
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? Die Beispielcodes finden sich übrigens auch hier.

Gruß

jobo