Javascript | Scope(스코프)

Jae ·2021년 8월 4일
0

Javascript

목록 보기
10/14

✅ Achievement Goals

  • 스코프의 의미와 적용 범위를 이해할 수 있다
  • 스코프의 주요 규칙을 이해할 수 있다
    • 중첩 규칙
    • block scope와 function scope
    • 전역 스코프와 지역 스코프
    • 전역 변수와 지역 변수간의 우선 순위
    • let, const, var 의 차이
    • 전역 객체(window)의 이해

Scope(스코프)

Scope를 우리말로 번역하면 '범위'라는 뜻을 갖고 있다. 범위라는 뜻처럼 자바스크립트에서 스코프'변수에 접근할 수 있는 범위'라고 할 수 있다.

자바스크립트에서 스코프는 2가지 타입이 있다.

스코프의 구분

자바스크립트에서 스코프를 구분해보면 다음과 같이 2가지로 나눌 수 있다.

  • 전역 스코프(global scope)
    코드 어디에서든지 참조할 수 있다.

  • 지역 스코프 (Local scope or Function-level scope)
    함수 코드 블록이 만든 스코프로 함수 자신과 하위 함수에서만 참조할 수 있다.

모든 변수는 스코프를 갖는다. 변수의 관점에서 스코프를 구분하면 다음과 같이 2가지로 나눌 수 있다.

  • 전역 변수 (Global variable)
    전역에서 선언된 변수이며 어디에든 참조할 수 있다.

  • 지역 변수 (Local variable)
    지역(함수) 내에서 선언된 변수이며 그 지역과 그 지역의 하부 지역에서만 참조할 수 있다.

변수는 선언 위치(전역 또는 지역)에 의해 스코프를 가지게 된다. 즉, 전역에서 선언된 변수는 전역 스코프를 갖는 전역 변수이고,
지역(자바스크립트의 경우 함수 내부)에서 선언된 변수는 지역 스코프를 갖는 지역 변수가 된다.

전역 스코프를 갖는 전역 변수는 전역(코드 어디서든지)에서 참조할 수 있다. 지역(함수 내부)에서 선언된 지역 변수는 그 지역과 그 지역의 하부 지역에서만 참조할 수 있다. 코드로는 어떤 형태로 나타날 수 있는지 예시를 통해 살펴보자.

let username = 'Jae';
if (username) {
  let message = `Hello, ${username}!`;
  console.log(message); // Hello, Jae!
}

console.log(message); 
// Uncaught ReferenceError: message is not defined at <anonymous>:7:13

4번째 줄에서 message를 출력할 때는, 3번째 줄의 username바깥 스코프에서 가져왔으므로 정상적으로 출력된다. 하지만, 6번째 줄에서는 message라는 변수 자체가 안쪽 스코프에 선언되어 있으므로, 바깥쪽에서는 접근할 수 없다.

let greeting = 'Hello';
function greetSomeone() {
  let firstName = 'Josh';
  return greeting + ' ' + firstName;
}

console.log(greetSomeone()); // 'Hello Josh'
console.log(firstName); // VM12:8 Uncaught ReferenceError: firstName is not defined

greeting 변수는 바깥 스코프에 정의되어 있으므로, 함수 안쪽에서 사용할 수 있다. 따라서 greeting 변수와 firstName 변수의 조합의 의해 'Hello Josh' 문자열이 출력된다.

반면에, firstName 변수는 안쪽 스코프에 정의되어 있으므로 바깥쪽에서는 접근이 불가능하다. 따라서 ReferenceError를 출력한다.

스코프의 정의와 규칙

  • 스코프는 "변수 접근 규칙에 따른 유효 범위"입니다.

  • 안쪽 스코프에서 바깥쪽 스코프로는 접근할 수 있지만 반대는 불가능합니다. 이것이 첫번째 규칙입니다.

  • 두번째 규칙은, 스코프는 중첩이 가능하다는 것입니다. 스코프는 마치 중첩된 울타리와 같습니다.

  • 특별히 가장 바깥쪽의 스코프는 전역 스코프(Global Scope)라고 부릅니다. 전역의 반대말은 지역(local)으로 전역이 아닌 다른 스코프는 전부 지역 스코프(local scope)입니다.

  • 지역 스코프에 선언한 변수는 지역 변수, 전역 스코프에서 선언한 변수는 전역 변수입니다.

  • 스코프 규칙에서 또 하나 기억해야 할 규칙은, 지역 변수는 전역 변수보다 더 높은 우선순위를 가집니다.

0개의 댓글