블록문

스코프

let global = "global"
{
	const x = "hello";
	let y = "world";
	console.log(global);
	console.log(x, y);
}

// 에러 블록 스코프 범위에서 벗어남
console.log(x, y);

console.log(global)
const xx = 0;
let yy = 'Hello!';
console.log(xx, yy);

{
  const xx = 1; // 💡 블록 안에서는 바깥의 const 재선언 가능
  let yy = '안녕하세요~';

  console.log(xx, yy);
  // ⚠️ const, let을 빼먹으면 재선언이 아니라 바깥것의 값을(변수면) 바꿈!
}

console.log(xx, yy);

스코프 체인 scope chain

var a = 1;
let outer2 = function () {
  let inner2 = function () {
    console.log(a); // undefined : 아래 var에 의해 inner2 함수 스코프 안에서 호이스팅도되어 
    				// 선언은 되었지만 초기화되지 않았으므로 undefined가 반환됨
    var a = 3; // 변수의 은닉화 전역 변수(a)에 접근하지 못함
  };
  inner2();
  console.log(a); // 1
};
outer2();
console.log(a); // 1

전역 global 변수/상수