JavaScript

자바스크립트 (JavaScript) - 29 : 함수 스코핑(functional scoping)과 클로저

n.han 2016. 7. 19. 13:58

2) 자바스크립트에서의 scope (로컬, 글로벌)

 

자바스크립트의 scope는 로컬과 글로벌만이 있고, 블록 단위의 scope은 지원하지 않는다. 다음 예제는 이를 테스트한 예제이다.

 

<script>

        function test() {

        for(var i = 0; i < 10; i++){

               

        }

        alert('local : ' + i);

        }       

        test();

        alert('global : ' + i);

</script>

<script>

        function test() {

        for(i = 0; i < 10; i++){

               

        }

        alert('local : ' + i);

        }       

        test();

        alert('global : ' + i);

</script>

 

첫 번째 예제의 결과는 local : 10 출력한 후에 에러를 발생 시키고, 두 번째 예제는 local : 10 global : 10을 출력한다.

 

두 번째 예제는 i가 글로벌 scope이므로 이해할 수 있는 결과이다. 첫 번째 예제는 for문 밖에서 어떻게 i를 출력할 수 있을까?

 

그 이유는 자바스크립트에서 블록 단위의 scope이 존재하지 않기 때문이다.

 

즉 변수 i는 비록 for문 블록 안에서 선언되었다고 해도 test() 함수의 지역 변수로 존재한다.

 

또한 매개변수도 지역 변수이며, 클로저의 대상이 될 수 있다.