Javascript copies objects by reference, rather than literally. For example:
var myObject = {};
var myCopy = myObject;
myObject.foo = "bar";
alert(myCopy.foo); //alerts "bar"
But I am really struggling to think of practical, real world reason for this other than giving developers a way to make code slightly more readable (as you can give different uses for the same object different names).
The most likely thing is I have missed the point, so can anyone tell me what that point is?
After writing:
There is an object out in memory somewhere that you can refer to by the name
myObject. The following assignment:…says that
myCopynow refers to that same object, wherever it may be. This is the same thing that happens when you give an argument to a function:Now there is a variable called
localNamethat is local to someFunc that also refers to that same object out in memory.This is the fundamental way in which we pass around references to an object, so that it can be referred to by different names, in different scopes.
We could copy the entire structure into a new location in memory. There was nothing stopping the designers from creating a language that did that. But it’s less efficient — think of deeply nested objects — and generally not what you want to do. For example, if a function modified one property of an object, it would need to return the entire object for that change to persist outside of the function. And the caller would need to handle that return value, deciding whether the old object needs to be kept or if the newly created, slightly different copy can overwrite it.
Again, there’s nothing wrong with this design direction in principle; it’s just not how JavaScript was designed.