자바스크립트는 C++ 또는 Java와 다르게
블록스코프가 존재하지 않습니다. 하지만 자바스크립트 역시
블록스코프가 있는 것처럼 사용할 수 있을까요?
만약 IIFE, 즉시호출함수를 사용한다면 마치 블록스코프처럼 동작하게 하는 것이 가능합니다. 아래 예제를 봐주세요.
# 자바스크립트 블록스코프처럼 동작하는 예제
아래 예제를 봐주세요. 아래 예제는 블록스코프가 없는 일반적인 스크립트 코드입니다.
위 코드를 실행하면 당연히 i의 값 1이 출력됩니다.
만약 즉시호출함수를 사용하면 결과는 어떻게 될까요? if 블록문에 즉시호출함수 코드를 추가합니다.
이제 위 결과는 어떻게 나타날까요?
여기서는 익명함수에 선언된 변수 i는 즉시실행함수로 호출된 뒤 바로 파괴되어 변수 i의 값을 가지지 않아 undefined가 출력되게 됩니다.
# 블록스코프 활용하기
이처럼 함수 내부에 즉시실행함수를 사용하면 몇 가지 장점이 있습니다. 어떤 장점이 있을까요?
만약 하나의 함수 내부에 복잡하게 엃혀있는 다수의 내부함수가 동작한다고 가정할 경우 스코프 체이닝에 따른 동일한 변수명이 사용, 참조될 수 있습니다. 블록스코프는 이런 문제를 제거할 수 있습니다.
또한, 함수가 실행되면서 생성되는 활성화 객체의 변수 범위를 줄임으로써 메모리를 더 적게 차지할 수도 있게됩니다.