스코프란 ?

Simon·2023년 7월 23일

오늘은 항상 자바스크립트를 배우면 대부분 지나가다가 한번씩은 듣게 되는 스코프에 대해서 정리하는 글을 작성하려고 한다.

스코프(SCOPE) = 유효 범위

스코프는 자바스크립트를 포함한 모든 프로그래밍 언어의 기본적이며 중요한 개념입니다.
더욱이 자바스크립트의 스코프는 다른 언어의 스코프와 구별되는 특징이 있으므로 주의가 필요합니다. 스코프는 변수 및 함수와 깊은 관련이 있습니다.

저희는 이미 스코프를 경험했습니다. 함수의 매개변수는 함수 몸체 내부에서만 참조할 수 있고 함수 몸체 외부에서는 참조가 불가능합니다. 이것은 매개변수를 참조할 수 있는 유효범위, 즉 매개변수의 스코프가 함수 몸체 내부로 한정되기 때문입니다.

 function bitCoin(x,y){
 	console.log(x,y);
    return 2 + 5;
}

위 처럼 bitCoin이라는 함수가 있을 때 만약 함수 외부에서 console.log(x, y) (매개변수 참조) 한다면 x는 정의되어 있지 않다는 오류가 발생합니다.
다른 예제를 하나 더 보겠습니다.

var var1 = 1

if (true) {
  var var2 = 2;
} else {
  var var3 = 3;
}

function bitCoin() {
  var var4 = 4;

  function EthCoin(){
    var var5 = 5;
  }
}

console.log(var1) // 1
console.log(var2) // 2
console.log(var3) // 3
console.log(var4) // ReferenceError: var4 is not defined
console.log(var5) // ReferenceError: var5 is not defined

변수는 자신이 선언된 위치에 의해 자신이 유효한 범위, 즉 다른 코드가 변수 자신을 참조할 수 있는 범위가 결정됩니다. 변수뿐만 아니라 모든 식별자가 똑같이 적용됩니다.
모든 식별자(변수이름, 함수이름, 클래스 이름 등)는 자신이 선언된 위치에 의해 다른 코드가 식별자 자신을 참조할 수 있는 유효 범위가 결정됩니다. 이를 스코프라합니다.

스코프의 종류

코드는 전역(global)지역(local)으로 구분할 수 있습니다.
전역: 코드의 가장 바깥 영역, 전역 스코프, 전역 변수
지역: 함수 몸체 내부, 지역 스코프, 지역 변수

var x = "전역 변수 x";
var y = "전역 변수 y";

function 외부함수() {
 var z = "외부함수의 지역변수 z";

 console.log(x); // 전역 변수 x
 console.log(y); // 전역 변수 y
 console.log(z); // 외부함수의 지역변수 z

 function 내부함수() {
   var x = "내부함수의 지역 변수 x";

   console.log(x); // 내부함수의 지역 변수 x
   console.log(y); // 전역 변수 y
   console.log(z); // 외부함수의 지역변수 z
 }

 내부함수();
}

외부함수();

console.log(x); // 전역 변수 x
console.log(z); // ReferenceError: z is not defined

위에 코드를 보면
전역 변수 x,y는 어디서든 참조가 가능하다는 것을 알 수 있습니다.
지역 변수는 자신의 지역 스코프와 하위 지역 스코프에서 유효합니다.
외부 함수의 지역변수 z는 외부함수와 하위 지역인 내부함수에서 호출이 가능했습니다.
하지만 지역변수 z는 전역에서 참조하면 참조 에러가 발생합니다.

우리는 여기서 한 가지 궁금한 점이 생길 수 있습니다. 전역변수는 어디서든 참조가 가능하다고 했는데 그렇다면 내부 함수에서 x를 참조하면 전역변수 x가 아닌 내부 함수의 x를 참조합니다. 이것은 자바스크립트 엔진이 스코프 체인을 통해 참조할 변수를 검색했기 때문입니다.

오늘은 스코프에 대해서 간단하게 알아봤고 다음에는 이어서 스코프 체인에 대해 정리해보겠습니다!

profile
포기란 없습니다.

0개의 댓글