티스토리 뷰
스코프란?
- 변수 접근 규칙에 따른 유효 범위
- 식별자(변수 이름, 함수 이름, 클래스 이름 등)가 유효한 범위
- 바깥쪽에서 선언한 변수는 안쪽 스코프에서 사용할 수 있지만 안쪽에서 선언한 변수는 바깥쪽에서 사용 불가능.
- 스코프는 중첩이 가능하다
- 가장 바깥쪽의 스코프는 전역 스코프(Global scope) 그 외의 스코프는 지역 스코프(local scope)라고 한다.
- 지역 스코프에 선언한 변수는 지역 변수, 전역 스코프에 선언한 변수는 전역 변수라고 한다.
- 지역 변수는 전역 변수보다 더 높은 우선 순위를 가진다.
스코프의 종류
블록 스코프
- 중괄호를 기준으로 범위가 구분된다.
- var 키워드로 정의한 변수는 블록 스코프를 무시하고 함수 스코프만 따르나, 화살표 함수의 블록 스코프는 무시하지 않는다.
함수 스코프
- function 키워드가 등장하는 함수 선언식 및 함수 표현식은 함수 스코프를 만든다(일반 함수와 화살표 함수의 차이점).
- 주의 : 화살표 함수는 블록 스코프로 취급된다.
- 함수 스코프의 범위 : 함수의 코드 블록(함수의 몸체)
- var 선언은 함수 스코프의 최상단에 선언되며, 선언 키워드 없는 선언은 최고 스코프에 선언된다
- 함수 내에서 선언 키워드 없는 선언은, 함수 실행 전까지 선언되지 않은 것으로 취급한다.
- 위와 같은 이유로 var 키워드 보다는 let 키워드로 변수 선언하는 것을 권장한다
var, let, const 키워드
var 키워드 보다 let 키워드가 더 안전한 이유
- var 키워드의 문제점 : 벼수 중복 선언 허용, 오로지 함수의 코드 블록만을 지역 스코프로 인정
- let 키워드는 변수의 재선언을 방지하며 블록 레벨 스코프를 가진다.
값이 변하지 않는 상수를 정의할 때 사용하는 const
- let 키워드와 동일하게 블록 레벨 스코프를 갖는다.
- const 키워드로 선언한 변수는 반드시 선언과 동시에 초기화를 해야 하므로, 값의 변경을 최소화하여 안전한 프로그램을 만들 수 있다.
- 따라서 값을 새롭게 할당할 일이 없다면 const 키워드의 사용이 권장된다.
- const 키워드로 선언한 변수는 값의 재할당이 불가능하므로, 재할당 시 TypeError가 발생한다.
변수 선언 시 주의할 점
- var로 선언된 전역 변수 및 전역 함수는 전역 객체 window의 프로퍼티가 된다.
- window 객체는 브라우저의 창을 의미하는 객체이다.
전역 변수 최소화하기
전역 변수는 가장 바깥 스코프에 정의되기 때문에 어떤 스코프에서든 접근이 가능하다.
이러한 특징을 가진 전역 변수를 최소화 하는 것은 부수 효과(side effect)를 줄일 수 있다.
side effect : 다른 함수 혹은 로직에 의해 의도하지 않은 변경이 발생할 수 있다.
선언 없는 변수 할당 금지
- 선언 키워드(var, let, const) 없이 변수를 할당한다면 해당 변수는 var로 선언한 전역 변수처럼 취급된다.
- 위와 같은 실수를 방지하기 위해 Strice mode를 사용할 수 있다.
- strict mode를 사용려면 전역의 선두 또는 함수 몸체 선두에 'use strict'; 을 추가한다.
'부트캠프' 카테고리의 다른 글
DOM(Document Object Model) (0) | 2022.05.17 |
---|---|
원시 자료형과 참조 자료형 (0) | 2022.05.13 |
객체 (0) | 2022.05.11 |
배열과 배열 메서드 (0) | 2022.05.10 |
npm과 package.json (0) | 2022.05.10 |