Primitive 타입
number공간 number2 메모리 공간이 따로 정해져 있고 둘다 2로 출력이 된다.
여기에서는 number2가 3으로 바꼈으니까 이제 2 3으로 출력이 될 것이다.
Object 타입
obj라는 변수에 오브젝트를 만들자 obj 변수안에 name이라는 메모리에는 jay가 age메모리에는 27이 들어있다.
obj2에는 obj와 같은 내용의 메모리가 한개 더 들어있다.(가리키고 있는 name age 오브젝트는 동일하다)
가리키고 있는 오브젝트가 obj나 obj2 둘 다 동일하니까 obj의 이름을 james라고 해도
obj와 obj2의 name 둘 다 james라고 출력이 된다.
number, string ,boolean, null, undefined 모두 메모리에 그대로 들어오지만,
오브젝트처럼 뚱뚱한 것은 들어올 수 없어서 오브젝트가 따로 할당이 되어있고 이것을 가리키고 있는 주소가 있다.(reference) 주소같은 것이 오브젝트에 들어가 있다.
그리고 변수를 다른 변수에 할당하거나 전달할 때 변수안에 들어있는 값이 복사되어서 가는데 number~undefined까지는 값자체가 복사되어져 가지만 오브젝트 같은경우는 레퍼런스가 복사된다.
오브젝트를 통해서 데이터를 변경하면 오브젝트가 가리키고 있는 데이터가 변경이 된다.
const로 변수를 지정한 다음 오브젝트와 값을 넣어주고 같은 변수명과 오브젝트에 다른값을 할당하면 에러가 난다.
레퍼런스 값자체가 변경이 안되기 때문이다.
레퍼런스 공간 자체는 잠겨있지만 레퍼런스가 가리키고 있는 값들은 변경이 가능하기 때문에
아래와 같이 출력될 수 있다.
참고: https://www.youtube.com/watch?v=__Zz17_5FRU&list=PLv2d7VI9OotTVOL4QmPfvJWPJvkmv6h-2&index=15
'JavaScript > DreamCoding' 카테고리의 다른 글
boolean과 && 연산자 (0) | 2021.08.03 |
---|---|
함수 정의, 호출, 콜백함수 (0) | 2021.08.03 |
JavaScript function 재정리 (0) | 2021.08.03 |
비동기 async와 await & Promise APIs (0) | 2021.08.03 |
프로미스 활용하기(JavaScript Promise) (0) | 2021.08.03 |