In Javascript we assign a variable with the = operator.

And we assign variable either with primitives or non-primitive data type.

What are primitives?

Primitives are undefined, null, boolean, string, and number.

So all of the following are assigning primitive to a variable.

var a = 5;
var b = null;
var c = undefined;
var d = true;
var e = false;
var f = "hello there";
var g = "example12345";
var h = 77777;

Non primitives are objects, array and function.

var a = {"Name" : "David"};
var b = [1,2,3,4,5];
var c = function sum(firstNumber, SecondNumber) 
{ return firstNumber + secondNumber };

The way primitives and non-primitives are being assigned is different.

Primitive values and passed by values, while non-primitive values are passed by reference.

If we pass or reference a primitive value, it gets its own spot in memory every time.

var a = 3;
var b = 5;

Every time we make changes to the assignment, the changes doesn't affect other variables even if we do something like this:

var a = "Sarah";
var b = "Sarah";

a = b;  

b = "James"; // who is a?

a is still Sarah

Non-primitives like objects and functions however are passed by reference.

var person = {
	"name": "Sarah"
}

var a = person;
var b = person;

Meaning there's no new values being created and stored in memory, only new references (pointers) are assigned to the object.

So when the object changes, all references assigned to the object changes as well.

var person {
	"name" : "Sarah"
}

var a = person //a.name == "Sarah"
var b = person //b.name == "Sarah"

a.name = "James"

//what is b.name?

b.name == "James"

A practical example

Consider a function where we're adding the total of 2 numbers.

function total(a,b){
	return a+b;
} 

var SarahAge = 7; 
var James = {"age":10}; 
var Mike = James; 

total (SarahAge, James.age) //return 17

Mike.age = 20; //update Mike's age

total (SarahAge, James.age) //now return 27

Notice how after we've updated Mike's age, James' age changes as well. This is because both James and Mike's age are pointing to the same memory.

So when James age changes, so does Mike's.

This is something to be aware of whenever we're passing objects around in functions variables.