👊

블록레벨 스코프, 함수레벨 스코프

자바스크립트의 var는 함수레벨스코프를 갖고있다. 따라서, 다른 프로그래밍언어처럼 정교하지 못하다.
블록레벨 스코프를 위해 도입된 let과 const선언문을 사용해서 더 정교한 프로그래밍을 하자.

상위 스코프

  • 함수가 호출되는 시점에 결정 -> 동적 스코프
  • 함수가 정의되는 시점에 결정 -> 정적 스코프(===렉시컬 스코프) (자바스크립트의 특징)
자바스크립트의 함수가 정의되는 시점에 상위스코프가 결정이 되고,
해당 함수에 의해 함수 객체가 생성이 되면, 해당 함수 객체는 본인의 상위 스코프를 항상 알 수 있게 된다. -> 자바스크립트의 함수는 태어나면서 자신의 내부 슬로세 상위스코프의 참조를 저장하기 때문이다.
함수 호출 -> 실행 컨텍스트 생성 -> 실행 컨텍스트 스택에 추가-> 렉시컬 환경 생성 -> 코드 실행이 끝나면, 실행 컨텍스트 스택을 pop하여 제거한다.

클로져

실행 컨텍스트가 끝난 외부함수를 참조하는 내부함수
const x = 1; function outer() { const x = 10; const inner = function () { console.log(x); }; return inner; } const hun = outer(); hun(); // 10
중첩 함수
  • 상위 스코프의 식별자를 참조하고 있고
  • 본인의 외부 함수보다 더 오래 살아있다면.. -> 클로져