원시 자료형 : 하나의 변수에 하나의 데이터만 담을 수 있는 구조
-Ex) null, string, number, boolen, undifined, 변수선언후 지정 값
참조 자료형 : 실제 데이터는 heap에 담기고 할당시에는 heap을 가르키는 주소값을 할당되는 다양한 크기의 변수를 담을 수 있는 자료형
-Ex) 배열, 함수, 객체등 원시 자료형에 해당하지 않는 자료형(Object)
스코프: 중괄호({}블록) 혹은 함수 인해 정해진 범위
[규칙]
1. 외부 스코프에서 내부 스코프의 변수는 사용할 수 없지만 내부 스크프에서 외부 스코프의 변수는 사용가능
2. 중첨 사용 가능 (지역변수가 전역 변수보다 높은 우선순위를 가진다 ==> 재할당으로 이해)
[종류]
1. 블록 스코프: {} 괄호를 기준으로 생기는 범위(var, var은 블록스코프를 무시하고 함수 스코프만 따름)
2. 함수 스코프: function 키워드와 함께 함수를 선언하는 구조, 함수를 호출할 때 마다 새로운 스코프 생성(let, const)
[변수 선언 키워드]
1. var : 재할당 O, 재선언 O, 블록스코프 유효 x
2. const : 재할당 x, 재선언 x, 블록스코프 유효 O
3. let : 재할당 O, 재선언 x, 블록스코프 유효 O
클로저
- 함수를 반환하는 함수
- Lexical scoping
- 내부에서 바깥 스코프에 선언한 변수 접근 O
- 외부에서 내부 스코프에 선언한 변수 접근 X
- 외부함수의 실행이 끝나도 외부 함수 변수 데이터가 남음
- 스코프 규칙을 통해 스코프 밖에서 변수 변경이 불가능(캡슐화)
- 각각의 선언으로 리턴된 객체는 서로 영향을 끼치지 않음(모듈화)
spread/rest
- spread : 여러개의 데이터를 각 요소로 풀어서 사용할 수 있게 해줌
- rest : 매개변수를 생성해 들어는 요소를 모두 하나의 배열로 반환
==> rest와 spread는 응용할 수 있는 상황이 있을 때 마다 사용해 보니 기존의 코드보다 훨씬 간결 코딩 가능
구조분해할당 : 배열 혹은 객체의 요소들을 변수로 분해할당하는 방법으로, 많은 요소들을 활용하기 위해 값을 전달 혹은 받을 때등 다양하게 활용됨
해당 변수들의 값이 어떻게 할당 및 재할당 되는지 생각하며 기본 이해