자바스크립트는 함수 지향 언어이기 때문에 함수를 동적으로 생성할 수 있고, 생성한 함수를 다른 함수에 인수로 넘길 수 있으며, 생성된 곳이 아닌 곳에서 함수를 호출할 수도 있다. 함수 내부에서 함수 외부에 있는 변수에도 접근이 가능하다.
그런데 함수가 생성된 이후에 외부 변수가 변경되는 등
변수의 유효 범위가 어디까지인지,
함수는 어떤 시점에서의 변수 값을 가져와야 할지에 대한 의문이 생길 수도 있다.
다음은 자바스크립트 변수의 유효 범위에 대해 소개한다.
코드 블록 { … } 안에서 선언한 변수는 블록 안에서만 사용할 수 있다.
이런 블록의 특징은 특정 작업을 수행하는 코드를 한데 묶어두는 용도로 활용한다. 블록 안에는 작업 수행에만 필요한 변수가 들어간다.
{
// 메시지 출력
let message = "안녕하세요.";
alert(message);
}
{
// 또 다른 메시지 출력
let message = "안녕히 가세요.";
alert(message);
}
if, for, while 등에서도 마찬가지로 블록 안에서 선언한 변수는 오직 블록 안에서만 접근 가능하다. (참고로 for문에서 for 옆 괄호에 선언한 변수는 밖에 있긴 하지만 블록에 속하는 것으로 간주.)
자바스크립트에서는 실행 중인 함수, 코드 블록, 스크립트 전체는 렉시컬 환경이라고 불리는 내부 숨김 연관 객체를 갖는다.
이는 두 부분으로 구성된다.