var d ='X';
function outer(){//함수 수준 스코프
var a = 1;
var b = 'B';
function inner(){
var a = 2;
// console.log(a)//이번엔 inner함수에 표인 스코프를 들여다 볼 때 찾는 a의 값은 2이다.
// console.log(b) // inner 함수의 표에서 b를 찾고 없으면 outer함수 표에서 찾아 b의 값 'B'가 나온다.
// console.log (d) //글로벌 스코프의 표가 또 만들어지고 이런식으로 스코프 끼리 연결되는 것이 스코프 체인이다
console.log(b);
}
return inner;
}
//outer();
//콘솔에 로그를 찍을 때 a의 무슨 값이 들어있는지 찾는 곳이 바로 스코프
//변수명이나 함수명을 가지고 들어가 있는 값을 찾을 때 들어다 보는 곳이 스코프이다
//현재 이 스코프는 outer함수에 범위에 속해있다.
var someFun = outer();
someFun();//B가 찍히는데 이게 바로 클로저인데 생성한 시점에 스코프 체인을 계속 들고 있다. 들고 있기 때문에 클로저라 부르고
// 클로저 때문에 outer함수가 실행된 다음에도 inner함수가 outer함수에 대한 스코프를 들고 outer는 글로벌스코프를 드들고 있어
// 그래서 밖으로 꺼낸 다음에도 outer가 실행된 다음에도 outer에 스코프를 접근할 수 있는거