스코프

WONNY_LOG·2023년 9월 20일

스코프 ?

JS에서는 변수에 접근할 수 있는 범위

  • 직역하면 범위라는 뜻
  • 식별자(변수)를 찾기 위한 규칙

스코프 종류

1. 전역 스코프

전역에 변수를 선언하면 이 변수는 어디서든지 참조할 수 있는 전역 스코프를 갖는 변수가 된다

  • Global scope
  • 코드 어디에서든지 참조 가능
  • ex) 함수 밖에서 선언된 변수는 전역으로 사용가능하다

2. 지역 스코프

함수 내에서 선언된 매개변수와 변수는 외부에서는 유효하지 않는 지역 스코프를 지닌다

  • 함수 레벨 스코프라고 할 수도있다
  • Local scope / Function-level scope
  • 함수 코드 블록이 만든 스코프로, 함수 자신과 하위 함수에서만 참조할 수 있다.

스코프 특징

1. 블록 레벨 스코프

  • 코드 블록 ({}) 내에서만 참조(접근)가능한 범위

2. 함수 레벨 스코프

  • 함수 코드 블록 내에서만 참조(접근) 가능한 범위

3. 렉시컬 스코프

  • Scope의 또다른 특징으로, 상위 스코프를 결정
  • 함수를 어디서 선언 하였는지에 따라 상위 스코프를 결정
  • JavaScript 및 대부분의 프로그래밍 언어에서 사용하는 방법
    (자바스크립트는 렉시컬 스코프를 따르므로 함수를 선언한 시점에 상위 스코프가 결정된다)

4. 동적 스코프

  • 함수를 어디서 호출 하였는지에 따라 상위 스코프를 결정

지역변수와 전역변수가 중복 선언된 경우

  • 전역 영역에서는 전역 변수만 참조가능
  • 함수 내에서는 지역과 전역 변수 모두 참조가능
    => 변수명이 중복된 경우 지역변수를 우선 참조한다.
    => 중첩 스코프는 가장 인접한 지역을 우선하여 참조한다.

전역 변수의 문제점

1. 암묵적 결합을 허용하는 것.

  • 모든 코드가 전역 변수를 참조하고 변경할 수 있는 암묵적 결합(implicit coupling)을 허용하는 것이다.

2. 전역 변수는 생명 주기가 길다.

  • 런타임 이전 단계에서 자바스크립트 엔진에 의해 먼저 실행한다

3. 스코프 체인 상에서 종점에 존재

  • 변수를 검색할 때 전역 변수가 가장 마지막에 검색된다는 것을 말하며, 검색 속도가 가증 느리다.

4. 네임스페이스 오염

  • 다른 파일 내에서 동일한 이름으로 명명된 전역 변수나 전역 함수가 같은 스코프 내에 존재할 경우 예상치 못한 결과를 가져올 수 있다.
  • 전역 변수는 선언되면 프로그램 실행이 끝날 때 까지 메모리 공간을 차지하기 때문에, 메모리 부족의 원인이 될 수 있다.

0개의 댓글