언어(Programming Language)/JavaScript

[JavaScript] 스코프(Scope)개념

RyanSin 2022. 1. 29. 21:32
반응형

- 개요

안녕하세요. 이번 시간에는 자바스크립트에서 스코프(Scope)에 대해 알아보겠습니다.

 

- 개념

Scope라는 단어를 우리나라 말로 해석하면 '범위'라는 뜻을 가지고 있습니다. 즉, 스코프(Scope)는 '변수에 접근할 수 있는 범위'라고 할 수 있습니다. 

 

자바스크립트에서는 2가지 타입의 스코프가 있습니다. 전역(Global) 스코프와 지역(Local) 스코프

 

전역 스코프(Global Scope)는 말 그대로 전역에 선언되어 있어서 어느 곳에서든 해당 변수에 접근을 할 수 있습니다.

반대로 지역 스코프(Local Scope)는 말 그대로 해당 지역에서만 접근할 수 있어 지역을 벗어난 곳에서는 해당 변수에 접근할 수 없습니다.

 

/**
 * @author Ryan
 * @description 해당 javascript 파일 전체에 적용되는 전역 스코프
 */

//전역 스코프에 선언 "전역 변수"
const hi = "Hi"

function Hi() {
  console.log(hi)
}

function Bye() {
  /**
   * @author Ryan
   * @description Bye() 함수 지역 스코프
   */

  //Bye 함수 안에 선언된 "지역 변수"
  const bye = "Bye"
  console.log(bye)
}

Hi()
Bye()

/**
 * - 실행 결과 -
 * Hi
 * Bye
 */

 

위 hi 변수와 bye 변수에 차이는 변수를 참조할 수 있는 범위입니다.

 

만약 bye라는 변수를 Bye() 함수 밖에서 참조하면 "ReferenceError: bye is not defined" bye라는 변수가 선언되지 않았다는 Error가 발생합니다.

 

function Bye() {
  /**
   * @author Ryan
   * @description Bye() 함수 지역 스코프
   */

  //Bye 함수 안에 선언된 "지역 변수"
  const bye = "Bye"
  console.log(bye)
}

Bye()

console.log(bye)

/**
 * - 실행 결과 -
  /Users/sinhangug/ryan/dev/language/javascript.js:27
  console.log(bye)
              ^

  ReferenceError: bye is not defined
      at Object.<anonymous> (/Users/sinhangug/ryan/dev/language/javascript.js:27:13)
      at Module._compile (internal/modules/cjs/loader.js:1085:14)
      at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
      at Module.load (internal/modules/cjs/loader.js:950:32)
      at Function.Module._load (internal/modules/cjs/loader.js:790:12)
      at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:76:12)
      at internal/main/run_main_module.js:17:47
 */

 

전역 스코프와 지역 스코프에 차이는 변수에 접근할 수 있는 범위라고 생각하시면 됩니다.

 

이번 시간에는 스코프(Scope)에 대해 알아봤습니다. 어렵지 않은 개념이라고 생각합니다.

 

하지만 ECMAScript6(ES6)에서 let과 const가 생기면서 스코프에 대한 개념이 한층 더 추가됐습니다.

 

다음 시간에 더 자세히 알아보겠습니다.