[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;가 결과값으로 된다.
마지막으로 정리하면 함수는 사용될때가아닌 정의될때 참조할 변수가 전역변수인지 지역변수인지 정해지게된다. 이러한것을 정적 유효범위 혹은 렉시컬 스코핑이라고 부른다.
마지막으로 정리하면 함수는 사용될때가아닌 정의될때 참조할 변수가 전역변수인지 지역변수인지 정해지게된다. 이러한것을 정적 유효범위 혹은 렉시컬 스코핑이라고 부른다.
댓글
댓글 쓰기