JavaScriptにおける関数のレキシカル環境

関数からアクセス可能なすべての外部変数は、 その関数のレキシカル環境 (LexicalEnvironment)と呼ばれます。

次の例では、関数は二つの変数にアクセスできます: num1とnum2、これらが 私たちの関数のレキシカル環境を構成します:

javascriptlet num1 = 1;
let num2 = 2;

function func() {
  // 関数は変数num1とnum2を知っている
}

レキシカル環境自体は、私たちの関数に紐づけられた JavaScriptの内部オブジェクトのようなものです。 この場合、次のように表現できます:

javascript{num1: 1, num2: 2}

レキシカル環境内の任意の変数の値は、 常にその変数の現在の値と等しくなります:

javascriptlet num1 = 1; // 環境 {num1: 1}
let num2 = 2; // 環境 {num1: 1, num2: 2}

// 変数num1を変更します:
num1 = 123; // 環境 {num1: 123, num2: 2}

function func() {
  
}

関数内で任意の変数にアクセスしようとすると、 その変数は最初に関数のローカル変数の中から探され、 そのような変数がそこにない場合、 関数のレキシカル環境の中から探されます。