해당 오픈소스 뿐만 아니라 이런 기술적인 라이브러리, 소스 코드 분석 시 기초가 되는 가장 중요한 내용이다.
JS에서는 Value Type이 아니라 원시값(primitive type), 객체 타입(object/reference type)이라고도 한다.
보통 변수가 할당되게 되면, 특정 메모리 공간에 변수 값이 들어가게 된다. 변수 값이 들어가게 된다면, 그 변수를 저장하기 위해 메모리 공간이 할당되고 그 메모리 공간의 주소 또한 반환되게 된다.
var result = 10 + 20;

C 계열의 언어(C, C++ 등)에서는 해당 값의 메모리 주소를 가져오는 pointer 또한 사용이 가능하지만, 기본적으로는 값 자체를 가져오게 된다.

식별자는 어떤 값을 구별해서 식별할 수 있는 고유한 이름을 의미한다. 식별자는 값이 아니라 메모리 주소를 기억하고 있다.
Call by Value는 원시 타입(primitive type, ex. number, string, boolean)으로, 메모리 공간이 할당되더라도 실제로 반환하는 값은 값 자체를 반환하게 된다.
원시값은 변경 불가능한 값이라고도 한다. 메모리에 들어간 값 자체는 바뀌지 않기 때문이다. 따라서 변수의 값을 변경하면 새로운 메모리 공간을 확보하고 재할당한 값을 저장한 후 변수가 참조하던 메모리 공간의 주소를 변경한다. 즉, 원래 메모리에 있던 값은 변하지 않는 불변성을 갖는다.
var score = 80;
score = 90;

위에서 더이상 사용하지 않는 공간은 가비지 콜렉션(자바스크립트의 메모리 관리)를 통해 재사용할 수 있게 관리된다.
만약, 원시값을 갖는 변수를 다른 변수에 할당하면 원본의 원시값이 복사되어 전달된다. 이는 함수에서도 마찬가지로, 함수의 인자를 변경해도 원본이 전달되는 것은 아니다. 즉, 해당 변수의 원본에 접근을 할 수 없다.
let a = 1; //1번
let b = a; //2번
a = 10; //3번
이런 코드에서, b에 a의 값을 할당(2번)하였지만, 똑같은 메모리 주소를 참고하는게 아닌, a의 값을 그대로 복사해 다른 메모리 공간에 값을 할당하는 것이다. 따라서 a를 변경해도 b에 영향을 주지 않는다.