더북(TheBook)

2.2 진짜 블록 스코프

var는 블록에서 튀어나온다. var로 블록 내에서 변수를 선언하면 해당 블록 내부뿐만 아니라 외부에서도 변수를 사용할 수 있다.

function jumpOut() {
    var a = [1, 2, 3];
    for (var i = 0; i < a.length; ++i) {
        var value = a[i];
        console.log(value);
    }
    console.log("Outside loop " + value);  // 왜 'value'를 여기서도 사용할 수 있을까?
}
jumpOut();

jumpOut의 작성자는 아마도 루프 외부에서 값에 접근할 수 있도록 의도하지는 않았겠지만 접근할 수 있다(나도 마찬가지다). 왜 이것이 문제일까? 몇 가지 이유가 있다. 첫째, 변수는 유지 관리를 위해 가능한 한 좁게 범위를 지정해야 한다. 필요한 만큼만 존재해야 하며 그 이후 더 이상 없어야 한다. 둘째, 코드의 명백한 의도와 실제 효과가 다를 때마다 버그와 유지 관리 문제를 일으킨다. letconst는 진정한 블록 스코프를 가짐으로써 이것을 해결한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.