function myFunc(theObject) {
theObject = {make: "Ford", model: "Focus", year: 2006};
}
var mycar = {make: "Honda", model: "Accord", year: 1998};
var x = mycar.make; // returns Honda
myFunc(mycar);
var y = mycar.make; // still returns Honda
Why doesn't myFunc change the mycar object??
When you do
theObject = { ... }
withinmyFunc
, you are creating a new object and assigning its reference to the local variabletheObject
. This does not change the original object.To modify the contents of the original object, you need to directly modify its properties like this:
The question is already answered, just to make it even clearer:
is something similar (forget the syntax, get the message) to:
in other words, the parameter is referenced but you are changing that reference by constructing a new object.
Note: Since Java syntax is so popular I thought of using a JAVA-like syntax in order to explain, with didactic purposes, that you're creating a whole new instance. "TheObject" would be the name of the class.
Javascript is modifying the local reference not the original reference when making the change you supplied. This post on SO should help:
Is JavaScript a pass-by-reference or pass-by-value language?
Change this:
Here you are reassigning your variable to a new object. The original is left unchanged, because parameter does not link to the variable holding the object.
to:
This changes the object's properties you passed in.