1 분 소요

Scope란?

Scope는 우리 말로 번역을 하자면 ‘범위’라는 뜻을 갖는다. 즉 스코프란, 변수에 접근할 수 있는 범위라고 할 수 있다.

자바스크립트에서 Scope는 2가지 타입을 갖는다. 전역과 지역 스코프로 나뉘어 진다.

전역 스코프는 말 그대로 모든 범위에 선언 되어 있어 어느 곳에서든지 해당 변수를 접근할 수 있다는 의미이다. 지역 스코프는 해당 지역에서만 접근할 수 있어 지역을 벗어난 곳에선 접근 할 수 없다.

우리는 지역 스코프를 익숙하게 사용하고 있는데, 바로 함수 선언 할 때 자주 보게 된다. 이것은 함수 스코프로 지역 스코프의 한 예로 볼 수 있다.

let a = 1; // 전역 스코프

function print() {
  // 지역 스코프
  let a = 11;
  console.log(a);
}

print();

console.log(a);

이때 print 함수를 호출 하게 되면 1이 아닌 11이 호출이 된다.

그 이유로는 전역 스코프에 전역 변수로 a를 1로 할당을 했지만, 함수 스코프 내의 변수 a에 다시 11의 값을 호출했다. 따라서 함수 스코프 내의 a는 11의 값으로 할당이 되어 있어 11이 출력이 된다.

하지만 마지막의 a를 출력했을 땐 1로 출력이 된다. 그 이유로는 함수 스코프 즉, 지역 스코프 내에서 변수 a에 11로 할당을 했기 때문에, 지역 스코프 내에서만 유효한 범위 인 것이다. 따라서 마지막의 a의 출력값은 전역 스코프의 범위 이므로 1이 출력되는 것을 볼 수 있다.

이번엔 함수 내의 변수 선언을 없애고 살펴보자.

let a = 1; // 전역 스코프

function print() {
  // 지역 스코프
  console.log(a);
}

print();

이때 출력값은 1이다. 함수를 호출 했을 때, 매개변수로 a의 값을 전달해주지 않았는데, 어떻게 1이 출력이 될까? 이는 Scope Chain에 의해 일어나는 현상이다. 현재 자신의 Scope에서 사용하고자 하는 변수가 없다면 Scope Chain을 통해 해당 변수를 찾게 되어 전역으로 선언한 a의 값을 찾아 출력하게 된다.

댓글남기기