[JavaScript] 유효범위,정적 유효범위, 렉시컬 스코핑(Lexical Scoping)
자바스크립트는 함수가 선언된 시점에서의 유효범위를 갖는다. 이러한 유효범위의 방식을 정적 유효범위(static scoping) = 렉시컬(lexical scoping)이라고 한다. var i = 5; function a(){ var i = 10; b(); } function b(){ document.write(i); } a(); ->실행 결과 값은 5이다. *자바스크립트는 함수가 호출될때가아닌 선언된 즉 작성된위치에서의 변수를 참조하게되므로 위의 코드에서 전역변수를 참조하게되어 i는 전역변수인 var i = 5;를 참조하여 나타낸다. var i = 5; function a(){ var i = 10; function b(){ document.write(i); } b(); } a(); -> 실행 결과 값은 10이다. b함수가 선언된 시점이 a함수 안이므로, 1차적으로 b함수의 지역변수에 선언된 i를 찾아보고 없을경우 전역변수이자 a함수의 지역변수인 i를 참조하여 결과값 10을 가져오게된다. 만약에 a함수 안에서도 var i = 10;이 선언되지 않았다면 결과값은 전역변수로 선언된 var i = 5;가 결과값으로 된다. 마지막으로 정리하면 함수는 사용될때가아닌 정의될때 참조할 변수가 전역변수인지 지역변수인지 정해지게된다. 이러한것을 정적 유효범위 혹은 렉시컬 스코핑이라고 부른다.