티스토리 뷰
렉시컬 스코프란
함수를 어디서 호출하는지가 아니라 어디에 선언했는지에 따라 결정되는 것입니다.
즉, 함수를 어디서 선언하였는지에 따라 상위 스코프를 결정한다는 것이며, 가장 중요한 것은 호출이 아니라 선언된 장소에 따라 결정이 된다는 것입니다.
var x=1
function scope(){
var x=10;
scope_test();
};
function scope_test(){
console.log(x);
};
scope();
scope_test();
의 결과로 10과 1이라고 생각할 수 있지만, 실제 결과는 1과 1 입니다.
왜냐면, 자바스크립드에서 코드를 실행할 때 코드들의 스코프를 결정하기 때문입니다.
위 예제의 실행 결과는 함수 scope_test()에서 참조하는 x변수는 scope_test()의 상위 스코프가 무엇인지에 따라 결정됩니다. 상위 스코프가 무엇인지 알려면 scope_test()가 어디서 선언되었는지 봐야되는데, 이 코드는 scope_test()가 global에 선언되었음으로, 상위 스코프는 global 스코프가 됩니다.
자바스크립트는 렉시컬 스코프(Lexical Scope)를 따르므로 함수를 선언한 시점에 상위 스코프가 결정됩니다.
즉, 이 말은 함수를 어디에서 호출하였는지는 스코프 결정에 아무런 의미를 주지 않는다는 말입니다..
그렇기 때문에, scope_test() 함수가 scope() 함수 안에서 호출된 것과 상관없이 scope_test() 함수는 global 범위에 선언되어 있으므로, global 범위에 있는 변수 x의 값 1이 두 번 출력된 것입니다.
'코드잇' 카테고리의 다른 글
[자바스크립트] this에 관하여 (0) | 2024.11.22 |
---|---|
[자바스크립트] var,let,const 차이점 (1) | 2024.11.19 |
[Git] Git-Flow 브랜치 전략 (1) | 2024.11.01 |
[Git] branch merge에 대해서 (0) | 2024.11.01 |
시멘틱 태그의 장점 (0) | 2024.10.24 |