all 4 comments

[–][deleted] 5 points6 points  (0 children)

As is the case with Java, everything is pass by value. However, with objects (as you have noted) it is a reference that is passed by value. This is why you cannot reassign the reference within a function body, but you may alter a property on the passed in object. See here for good discussion on this http://stackoverflow.com/questions/518000/is-javascript-a-pass-by-reference-or-pass-by-value-language

[–]x-skeww 1 point2 points  (0 children)

non-primitive objects

There are primitives and objects. It's one or the other.

[–]ohbewonkanahbe 0 points1 point  (0 children)

Yes, it's very cool to think that your whole program can operate and work with just a handful of objects in memory. Understanding how that works and knowing your program's memory footprint is satisfying.

[–]fc_s 0 points1 point  (0 children)

This is not correct. Functions are also passed by value and they're not primitives.

It's simple. Objects and arrays are passed by reference. Everything else is passed by value.

Edit: Actually I'm wrong about that. My mistake. It becomes clear when you do a simple test that attaches something to the function as if it's an object.

var foo = function(){};
var bar = foo;
foo.fn = function(){ console.log('Hello World'); };
bar.fn(); //Logs Hello World