처음 듣는 용어가 많이 나와서 처음에는 당황했지만 사실 내용을 보면 이미 알고 있는 것이었다.
잘 기억해두기 위해 한번 정리해봤다.
스코프체인은 결국 이런 것이다.
나는 지금 내 방에서 학교 과제를 하려고 한다. 그런데 가방에 교과서가 없다! 분명히 학교에서 가져왔는데 말이다...
가방을 아무리 찾아봐도 책이 안보이면 나는 교과서를 찾기 위해 내 방 여기저기를 찾아다닐 것이다.(책상 위, 침대 위 등...)
만약 그래도 못찾으면 방에서 나와 다른 방을 찾을 것이다...(거실 소파 위.. 화장실 ㅋㅋ 등)
다른 방에서도 못찾으면 "아.. 내가 학교에 놓고 왔나보다..."하고 학교까지 교과서를 찾으러 갈 수도 있다.
스코프체인은 결국 우선 내가 있는 곳에서 원하는 것을 찾으려고 하고 만약 없으면 밖으로 나와서 점점 멀리까지 나와서 찾는 것을 말한다. (지역 스코프 → 전역 스코프로 이동)
위 내용을 이해한 다음, 아래 코드를 보면 너무나 당연한 것처럼 느껴진다.
function foo() {
console.log('global');
}
function bar() {
function foo() {
console.log('local');
}
foo(); // local
}
bar();
foo(); // global
평소에 let, const만 쓰는 나에게 이래 코드는 너무나 충격적이었다...
var x = 1;
if(true) {
var x = 10;
}
console.log(x); // 10
var는 함수의 코드 블록만을 지역 스코프로 인정한다..
그래서 이 코드에서 var x = 10은 지역 변수가 아니라 전역 변수이다...😱😱😱😱😱😱