변수 타입(var, let, const)과 스코프(scope) 개념
var, let, const 의 차이
- var는 function scope(함수블록 {}이외에는 모든 변수는 전역변수)이고 let과 const는 block scope(모든 코드 블록-if, for 등에서 선언된변수는 해당 코드 블록 내에서만 유효)임
참고링크
- var는 재선언 및 재할당이 가능하고, hoisting 가능
- var는 초기값이 없으면 자동으로 undefined를 초기값으로 메모리 할당하므로 에러 발생 X
- let은 재선언 불가, 재할당은 가능, const는 재선언 및 재할당 불가
- let과 const는 hosisting 불가(Temporal Dead Zone이 선언과 초기화 사이에 생김)
- 단, const로 변수 선언하더라도, object 자체 변경은 불가하지만, 내부의 속성 값 변경은 가능
참고링크
변수 타입별 scope 차이
- scope는 변수의 유효범위
- 유효범위를 결정하는 두 가지 요소는 프로그래밍 구문만으로 유효범위를 정한는 lexical scope와 프로그램 실행 중에 유효범위를 정하는 dynamic scope가 있음 (lexical scope는 함수를 호출할 때가 아닌 함수를 선언할때 scope가 발생하는 개념 -> 헷갈리기가 쉬움) -https://www.zerocho.com/category/JavaScript/post/5740531574288ebc5f2ba97e
- JS 변수는 변수의 유효범위에 따라 전역변수와 지역변수로 나뉨
- scope chain은 내부함수부터 외부로 단계적으로 변수를 찾아가는 순서(내부함수에서 외부함수의 변수에 접근 가능하지만, 외부함수에서 내부함수 변수에 접근할 수 없음)