본문 바로가기
게시판

자바스크립트 Scope

by Seolyu 2024. 6. 16.

 

JavaScript Scope

 

Scope (스코프: 유효범위)

자바스크립트의 스코프는 변수가 어디서 접근 가능한지를 결정하고, 변수의 생성부터 소멸까지의 과정을 관리한다

스코프는 변수 이름 충돌을 방지하고 메모리 관리를 자동화(메모리 절약)하여 개발자가 더 효율적으로 코드를 작성할 수 있도록 한다

 

 

스코프의 종류

자바스크립트에는 세 가지 주요 스코프 유형이 있다

  1. 전역 스코프 (Global Scope)
  2. 함수 스코프 (Function Scope)
  3. 블록 스코프 (Block Scope, ES6부터 도입)

 

전역 스코프 (Global Scope)

전역 스코프는 코드 어디에서나 접근할 수 있는 변수를 정의하는 범위이다

전역 변수는 페이지가 로드되면 생성되고, 페이지가 닫힐 때까지 존재한다

 

함수 스코프 (Function Scope)

함수 스코프는 함수 내에서 정의된 변수들로, 함수 내부에서만 접근이 가능하다

함수가 호출될 때 생성되고, 함수가 종료되면 소멸한다

 

블록 스코프 (Block Scope, ES6부터 도입)

ES6에서 도입된 let과 const 키워드를 통해 블록 스코프를 사용할 수 있다

블록 스코프는 중괄호 {} 로 묶인 블록 내부에서만 유효하다

 

 

변수의 접근성 및 생명 주기 관리

자바스크립트의 스코프는 변수가 접근 가능한 범위를 설정하고,

변수가 특정 코드 블록 내에서만 사용되도록 제한한다

이는 코등의 가독성을 높이고 유지 보수성을 강화하며, 변수의 예기치 않은 변경을 방지한다

 

예를 들어, 함수 내부에서 선언된 변수는 함수가 호출될 때 생성되고, 함수가 종료되면 사라진다

이렇게 하면 변수가 불필요하게 메모리를 차지하지 않도록 하여 메모리 효율성을 높인다

 

변수 이름 충돌 방지 및 메모리 관리

스코프는 동일한 이름의 변수가 서로 다른 스코프에서 선언되었을 때,

이 변수들이 충돌하지 않도록 보장한다

이는 코드의 예측 가능성과 안정성을 높여준다

또한, 자바스크립트 엔진은 스코프를 이용해 변수가 더 이상 필요하지 않으면 자동으로 메모리에서 해제하여 메모리 누수를 방지한다

 

 

실행 컨텍스트와 렉시컬 환경

자바스크립트의 스코프는 실행 컨텍스트와 렉시컬 환경과 밀접하게 관련되어 있다

  •    실행 컨텍스트 (Execution Context) : 자바스크립트 코드가 실행될 때 생성되는 환경으로, 모든 코드는 실행 컨텍스트 내에서 평가되고 실행된다. 실행 컨텍스트는 코드의 실행 순서와 스코프를 관리하는데 이는 실행 컨텍스트 스택(Call Stack)과 렉시컬 환경을 통해 이루어진다.
  •    렉시컬 환경 (Lexical Environment) : 코드가 어디서 실행되며 주변에 어떤 코드가 있는지를 나타내는 구조다. 이는 변수와 함수의 선언 위치에 따라 결정된다. 자바스크립트 엔진은 코드를 실행하기 전에 렉시컬 환경을 실제로 생성한다. 변수 선언이 실행되면 변수 식별자가 렉시컬 환경의 키로 등록되고, 변수 할당이 일어나면 이 자료구조의 변수 식별자에 해당하는 값이 변경된다.
    •    렉시컬 환경은 두 가지 컴포넌트로 구성된다
      •    환경 레코드 (Environment Record)
        •    변수, 함수 선언, let, const 선언 등을 포함한 실제 저장소
        •    렉시컬 환경 내부에 변수를 저장하고, 이 변수들을 추적하는 역할을 한다
      •    외부 렉시컬 환경 참조 (Outer Lexical Environment Reference)
        •    상위 스코프에 대한 참조를 유지한다
        •    현재 실행 중인 코드가 외부 환경의 변수들에 접근할 수 있게 한다

 

스코프 체인

스코프 체인은 자바스크립트 엔진이 변수를 찾기 위해 사용하는 메커니즘이다

스코프 체인은 물리적인 실체가 존재하며, 이는 렉시컬 환경의 체인으로 구성된다

자바스크립트 엔진은 특정 변수를 찾기 위해 현재 렉시컬 환경에서 시작하여 상위 렉시컬 환경으로 거슬러 올라가며 변수를 검색한다

 

 

결론

자바스크립트의 스코프는 변수의 접근 범위와 생명 주기를 관리하며,

변수 이름 충돌을 방지하고 메모리 관리를 자동화한다

이를 통해 개발자는 더 효율적이고 안정적인 코드를 작성할 수 있으며,

코드의 가독성과 유지 보수성을 향상시킬 수 있다

 

 

 

 

 

'게시판' 카테고리의 다른 글

WebSocket 웹 소켓📡  (0) 2024.06.16
자바스크립트 주요 개념  (1) 2024.06.08
프론트엔드 성능 최적화  (0) 2024.06.06
Tensorflow 딥러닝 AI 공부하기  (0) 2024.03.24
Flutter로 앱 만들기 공부  (0) 2024.03.24