본문 바로가기

JavaScript

[JavaScript] 스코프 | 전역스코프, 지역스코프, 스코프체인, 함수레벨스코프, 렉시컬 스코프

반응형

 스코프는 변수 또는 함수의 유효한 범위이다. 특정 스코프 내에서 선언된 변수는 해당 스코프에 종속되며, 이를 통해 변수의 가시성과 생명주기를 제어할 수 있다. 자바스크립트는 전역 스코프와 지역 스코프의 두 가지 주요 스코프를 가지고 있다.

 

 

전역 스코프

 전역 스코프는 특별한 스코프로서 모든 코드 영역에서 변수에 접근할 수 있다. 전역 변수는 전역 객체의 프로퍼티로 선언된다.

JavaScript에서 전역 객체는 웹 브라우저의 경우 window 객체에, Node.js의 경우 Global 객체에 해당한다. 전역 스코프에서 선언된 변수는 애플리케이션 전체에서 사용할 수 있다.

 

단, 전역 스코프에 무분별하게 변수를 선언하지 않는 것이 좋다. 이로 인해 메모리 낭비, 충돌 등의 문제가 발생할 수 있기때문이다.

 

 

 

 

지역 스코프

지역 스코프는 함수 내부에서만 액세스할 수 있는 스코프이다. 함수가 호출되고 실행 컨텍스트가 생성되면 그에 따라 지역 스코프도 생성된다.

function example() {
  // 이 함수의 지역 스코프 안에 변수 localVar를 선언
  let localVar = 'local';
}
console.log(localVar); // Error: localVar is not defined

위 예제 코드에서 localVar 변수는 example 함수의 지역 스코프에 속하므로, 함수 외부에서 접근하려고 하면 에러가 발생한다.

반응형

 

 

스코프 체인

 스코프 체인은 중첩된 함수에 대한 스코프를 계층적 구조로 연결하여 구성한다. 이를 통해 JavaScript 엔진은 변수와 함수에 접근할 수 있다. 변수가 현재 지역 스코프에서 발견되지 않으면, 자바스크립트 엔진은 상위 스코프를 따라 계속 찾아간다. 이 과정은 전역 스코프까지 진행되며, 만약 전역 스코프에서도 해당 변수를 찾지 못하면 에러를 반환한다.

 

 

 

 

함수 레벨 스코프

JavaScript는 기본적으로 함수 레벨 스코프를 가진다. 이는 블록 레벨 스코프와 차이가 있는데, 함수 레벨 스코프는 함수 내부에서만 액세스 가능한 변수를 생성한다는 의미이다. 하지만, ES6에서 도입된 let 및 const 키워드를 사용하면 블록 레벨 스코프를 지원한다.

 

 

 

 

렉시컬 스코프

 자바스크립트는 렉시컬 스코프 또는 정적 스코프를 사용한다. 이것은 스코프가 함수가 작성된 시점에 결정되는 것을 의미한다. 함수가 실행될 때 동작하는 자바스크립트 스코프 체인은 해당 함수가 유효한 스코프라고 부를 수 있는 스코프와 외부에 있는 중첩되지 않은 스코프를 모두 포함한다.

 

 

 

 

반응형