JavaScript는 다른 언어들(C언어, 파이썬 등)과는 다른 블록 scope 개념?을 갖는다.
자바스크립트는 다른 언어와는 달리 일반적인 블록 스포크를 따르지 않는다.
자바스크립트의 스코프는 특정 구문이 시행될 때 새로 생성된다.
- 스코프를 생성하는 구문들: function, with, catch
자바스크립트는 위의 구문들이 사용될 때만 스코프가 생생되고,
다른 프로그래밍 언어처럼 {}를 이용해 블록을 생성한다고 해서 스코프가 생성되는 것이 아니다.
스코프가 지속되는 것은 다른 언어와는 다른 자바스크립트만의 강점 중 하나이다.
자바스크립트에서 이러한 스코프의 지속성이 필요한 이유는
새로은 스코프가 생성되고 스코프 체인을 참조하는 함수를 변수에도 넣을 수 있고, 다른 함수의 인자로 넘겨줄 수 있으며, 함수의 반환값으로 활용할 수도 있기 때문인다. (자바스크립트는 1급객체)
즉, 지금 함수가 선언된 곳이 아닌 전혀 다른 곳에서 함수가 호출될 수 있어서, 해당 함수가 현재 참조하는 스코프를 지속할 필요가 있는 것!