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
스코프란 변수에 접근할 수 있는 범위를 의미. 전역과 지역 2개의 범위가 존재
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는 변수가 아니므로 호이스팅이 발생하지 않는다.