범위가 중괄호(블록) 또는 함수에 의해 나누어지고, 그 범위를 스코프라고 부른다.
규칙
1. 안쪽 스코프에서 바깥쪽 스코프로는 접근할 수 있지만 반대는 불가능
2. 스코프는 중첩이 가능하다.
3. 가장 바깥쪽의 스코프는 전역 스코프라고 부른다. 전역이 아닌 다른 스코프는 전부 지역 스코프
4. 지역 변수는 전역 변수보다 더 높은 우선순위를 가진다.
- 블록 스코프 - 중괄호를 기준으로 범위가 구분된다.
- 함수 스코프
블록 스코프에서 정의된 변수는 블록 범위를 벗어나는 즉시 접근할 수 없다.
주의할 점 : var 키워드는 블록 스코프를 무시한다. block 범위를 벗어나도 같은 function scope 안에서는 사용이 가능하다. (화살표 함수의 블록 스코프는 무시 x)
블록 단위로 스코프를 구분했을 때, 훨씬 더 예측 가능한 코드를 작성할 수 있으므로 let 키워드의 사용이 권장됨.
var을 사용하지 않는다 해도, 함수 스코프는 let으로 선언된 변수의 접근 범위를 제한함
var 선언은 함수 스코프의 최상단에 선언된다.
let 키워드는 재선언을 방지
값이 변하지 않는 상수를 정의할 때 쓰는 const
let 과 동일하게 블록 스코프를 따른다.
값의 재할당이 불가능 -> 의도하지 않은 값의 변경을 막을 수 있다.
let const var 유효 범위 블록 스코프 및 함수 스코프 블록 스코프 및 함수 스코프 함수 스코프 값 재할당 가능 불가능 가능 재선언 불가능 불가능 가능 let, const, var의 차이점은 무엇보다 유효범위에 있다!
var로 선언된 전역 변수 맟 전역 함수는 window 객체에 속하게 된다.
window 객체 : 브라우저 창을 대표하는 객체, 브라우저 창과 관계없이 전역 항목도 담고 있음
전역 변수에 너무 많은 변수 선언 x : 부수 효과 (side effect) 존재하기 때문
var 로 선언한 전역 변수가 window 기능을 덮어씌워 내장 기능 사용 불가 가능
선언 없이 변수를 할당하면, 해당 변수는 var로 선언한 전역 변수처럼 취급 된다.
브라우저가 보다 엄격하게 작동하도록 만들어준다.
사용하려면, js 파일 상단에 'use strict' 라고 입력하면 된다.