3.6 블록 내 함수 선언
수년 동안 함수 선언을 블록 안에 넣는 것은 사양에 포함되지 않았지만 허용되지 않은 것은 아니었다. 자바스크립트 엔진은 이를 “허용 가능한 확장”으로 처리할 수 있다. ES2015부터 블록의 함수 선언은 사양의 일부이다. 이에 대한 표준 규칙과 웹 브라우저의 느슨한 모드에서만 적용되는 “레거시 웹 의미 체계”도 있다.
먼저 블록의 함수 선언이 무엇인지 살펴보자.
function simple() { if (someCondition) { function doSomething() { } setInterval(doSomething, 1000); } } simple();
블록 안에 함수 선언(함수 표현식이 아님)이 있다. 그런데 함수 선언은 단계별 코드 이전에 호이스트되고 처리된다. 그렇다면 블록 내부의 함수 선언은 무엇을 의미할까?