0. 시작하기
오늘 모의면접 주제 중 scope가 있었다.
scope에 대한 개념은 잡혀있지만, 확실하게 기반을 잡고 가는 것이 좋을 것 같아 정리해보려고 한다.
1. scope란?
스코프는 변수가 접근(사용)할수 있는 범위로 변수가 선언된 스코프에 따라 접근 가능한 범위가 달라진다.
외부 스코프에서 선언된 변수는 내부 스코프에 접근이 가능하지만, 반대는 불가능하다.
2. block scope & function scope
스코프에는 두 가지 종류가 있는데 함수 스코프와 블록 스코프이다.
es6 이전에 사용하던 변수 var는 함수 스코프이고 es6에 와서 사용하는 let,const는 블록 스코프이다.
함수 스코프는 함수(function)단위고 블록 스코프는 대괄호({}) 단위로 나뉘어진다.
function a(num) {
if (num) {
var b = num;
return num;
}
console.log(b);
}
console.log(a());
함수 스코프를 받는 var은 위와 같은 코드에서 undefined
를 출력한다.
if문이 통과되지 않는데에도 변수 b가 선언된 이유는 var는 함수 스코프이기 때문이다.
function a(num) {
var b;
if (num) {
b = num;
return num;
}
console.log(b);
}
console.log(a());
따라서 var b 는 위와 같이 선언이 된다(호이스팅)
반면에 let으로 선언하면 reference error가 발생한다.
let은 블록 스코프로 함수가 아닌 if문 block 안에서만 참조가 가능해진다.