https://kwangsunny.tistory.com/37

https://ljtaek2.tistory.com/134

https://velog.io/@edie_ko/js-execution-context

https://velog.io/@oneook/스코프와-스코프-체인-JavaScript-Basics

https://kwangsunny.tistory.com/37

https://poiemaweb.com/js-scope

https://curryyou.tistory.com/277

스코프(scope)

스코프란 변수에 접근할 수 있는 범위를 의미. 전역과 지역 2개의 범위가 존재

전역 스코프(global)

const name = "Lim"; // 전역 스코프
function print(){
	console.log(name); // Lim
}

print();
console.log(name); // Lim

전역 스코프로 선언된 변수는 모든 범위에서 사용할 수 있다.

암묵적 전역

var x = 10; // 전역 변수

function foo () {
  // 선언하지 않은 식별자
  y = 20;
  console.log(x + y);
}

foo(); // 30

위 코드 실행 시 식별자 y에서 에러 일으키지 않고 마치 선언된 변수처럼 동작한다. 왜냐면 y에 값을 할당하면 전역 객체의 프로퍼티가 되기 때문이다.

js 엔진이 변수 y에 값을 할당하기 위해 먼저 스코프 체인을 통해 선언된 변수인지 확인한다. 이때 foo()함수의 스코프와 전역 스코프 어디에도 y를 선언하지 않았으므로 참조 에러가 발생해야하지만 전역변수.y = 20으로 해석하여 프로퍼티를 동적으로 생성한다. 이를 암묵적 전역이라고 한다. y는 변수가 아니므로 호이스팅이 발생하지 않는다.