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