자바스크립트는 함수 지향 언어이기 때문에 함수를 동적으로 생성할 수 있고, 생성한 함수를 다른 함수에 인수로 넘길 수 있으며, 생성된 곳이 아닌 곳에서 함수를 호출할 수도 있다. 함수 내부에서 함수 외부에 있는 변수에도 접근이 가능하다.

그런데 함수가 생성된 이후에 외부 변수가 변경되는 등

변수의 유효 범위가 어디까지인지,

함수는 어떤 시점에서의 변수 값을 가져와야 할지에 대한 의문이 생길 수도 있다.

다음은 자바스크립트 변수의 유효 범위에 대해 소개한다.

코드 블록

코드 블록 { … } 안에서 선언한 변수는 블록 안에서만 사용할 수 있다.

이런 블록의 특징은 특정 작업을 수행하는 코드를 한데 묶어두는 용도로 활용한다. 블록 안에는 작업 수행에만 필요한 변수가 들어간다.

{
  // 메시지 출력
  let message = "안녕하세요.";
  alert(message);
}

{
  // 또 다른 메시지 출력
  let message = "안녕히 가세요.";
  alert(message);
}

if, for, while 등에서도 마찬가지로 블록 안에서 선언한 변수는 오직 블록 안에서만 접근 가능하다. (참고로 for문에서 for 옆 괄호에 선언한 변수는 밖에 있긴 하지만 블록에 속하는 것으로 간주.)

렉시컬 환경(정적 스코프)

1. 변수

자바스크립트에서는 실행 중인 함수, 코드 블록, 스크립트 전체는 렉시컬 환경이라고 불리는 내부 숨김 연관 객체를 갖는다.

이는 두 부분으로 구성된다.