primitive type
let a = 'abc'
→ 변수 선언과 할당을 한 문장으로 표현.이유 : 데이터 변환을 자유롭게 할 수 있게 함과 동시에, 메모리를 더욱 효율적으로 관리하기 위함.
→ 미리 확보한 공간 내에서만 데이터 변환을 할 수 있다면, 변환한 데이터를 다시 저장하기 위해서 '확보된 공간을 변환된 데이터 크기에 맞게 늘리는 작업'이 선행되야 하는데, 만약 중간에 있는 데이터였다면, 해당 공간보다 뒤에 저장된 데이터들을 전부 뒤로 옮기고, 이동시킨 주소를 각 식별자에 다시 연결하는 번거로운 작업을 해야함 → 연산이 많아짐(비효율)
결론 : 효율적으로 문자열 데이터의 변환을 처리하려면, 변수와 데이터를 별도의 공간에 나누어 저장하는 것이 최적.
심플하게, 원시 자료형의 보관함인 변수에는 하나의 원시 자료형만 담을 수 있습니다. 라고 기억하자.
reference type
'use strict'
→ 선언 없는 변수 할당 같은 경우도 에러로 판단하게 함. (엄격모드)var | let | const | |
---|---|---|---|
유효 범위 | 함수 스코프 | 블록, 함수 스코프 | 블록, 함수 스코프 |
값 재할당 | 가능 | 가능 | 불가능 |
재선언 | 가능 | 불가능 | 불가능 |
MDN def : 함수와 함수가 선언된 어휘적(lexical) 환경의 조합을 말한다. 이 환경은 클로저가 생성된 시점의 유효 범위 내에 있는 모든 지역 변수로 구성된다.
클로저의 핵심은 스코프를 이용해서, 변수의 접근 범위를 닫는(closure; 폐쇄) 데에 있음.
심플한 클로저 함수의 정의 : "외부함수의 변수에 접근할 수 있는 내부함수"
함수 내부에 선언된 변수를 외부 스코프에서 값을 바꿀 수 없음 → 정보의 접근 제한, 캡슐화
클로저를 통해 불필요한 전역 변수 사용을 줄이고, 스코프를 이용해 값을 보다 안전하게 다룰 수 있다.