An explanation of JavaScript's pass-by-value, which is unlike pass-by-reference from other languages.
- JavaScript has 2 kinds of variable types: primitive and reference.
- A fixed amount of memory is reserved after creation of every variable.
- When a variable is copied, it's in-memory value is copied.
- Passing a variable to a function via a call also creates a copy of that variable.
The in-memory value of a primitive type is it's actual value (e.g. boolean true
, number 42
). A primitive type can be stored in the fixed amount of memory available.
- null
- undefined
- Boolean
- Number
- String
Primitive types are also known as: scalar types or simple types.
A reference type can contain other values. Since the contents of a reference type can not fit in the fixed amount of memory available for a variable, the in-memory value of a reference type is the reference itself (a memory address).
- Array
- Object
- Function
Reference types are also known as: complex types or container types.
var a = 13 // assign `13` to `a`
var b = a // copy the value of `a` to `b`
b = 37 // assign `37` to `b`
console.log(a) // => 13
The original was not changed, we can only change the copy.
var a = { c: 13 } // assign the reference of a new object to `a`
var b = a // copy the reference of the object inside `a` to new variable `b`
b.c = 37 // modify the contents of the object `b` refers to
console.log(a) // => { c: 37 }
The original was also changed, since the reference got copied.