This is in some respects a pass/assign by reference vs by value debate. By reference tends to be the default in most languages for anything that isn't a primitive for a number of reasons, probably chief amongst which are:
1) You're likely to churn through a lot of memory if each assignment / pass to a function creates a deep copy.
2) Extra fun when you're trying change the state of things... no more this.x = 5
if this.x
is already bound. Probably something like this = this.clone({x: 5})
instead, if we were semi-lucky.
For more background, take a look at these two links:
http://oranlooney.com/functional-javascript/
http://oranlooney.com/deep-copy-javascript/
I think the real question should probably be -- why isn't there a nice convenient method of Object
provided for doing deep copies?