렉시컬(정적) 스코프 lexical(static) scope

const x = 1;
const y = 1;
const z = 1;

function func1 () {
  const y = 2;
  const z = 2;

  console.log('2', x, y, z); // 1, 2, 2
  func2();
}

function func2 () {
  const z = 3;

  console.log('3', x, y, z); // 1, 1, 3
}

console.log('1', x, y, z) // 1, 1, 1;
func1();
const x = 1;
const y = 1;
const z = 1;

function func1 () {
  const y = 2;
  const z = 2;

  function func2 () {
    const z = 3;

    console.log('3', x, y, z); // 1, 2, 3
  }

  console.log('2', x, y, z); // 1, 2, 2
  func2();
}

console.log('1', x, y, z) // 1, 1, 1
func1();

렉시컬 환경 lexical environment

const x = 1;
const y = 1;
const z = 1;

function func1 (a) {
  const y = 2;
  const z = 2;

  function func2 (b) {
    const z = 3;

    console.log('3', x, y, z, b);
  }

  console.log('2', x, y, z, a);
  func2(a + 1);
}

console.log('1', x, y, z)
func1(1);

lexenv.png

클로저 closure