Notice
Recent Posts
Recent Comments
Link
쯔이's Dev
JS(5). 정적스코프 vs this 본문
반응형
정적 스코프(Static Scope)란?
정적 스코프(Static Scope)는 함수가 정의된 위치에 따라 해당 함수의 상위 스코프가 결정되는 방식을 의미한다.
JavaScript는 정적 스코프를 사용하는 언어이다.
따라서 함수 내부에서 변수에 접근할 때, 해당 변수를 찾는 기준은 "함수가 정의된 위치"이다.
즉, 함수가 실행되는 시점이나 호출된 위치가 아니라 코드에서 그 함수가 작성된 위치가 기준이 된다.
정적 스코프의 특징
- 함수의 스코프 체인은 정의된 시점에 고정된다.
- 함수가 실행되는 시점이나 호출된 위치와는 상관없이, 함수가 정의된 위치를 기준으로 스코프가 구성된다.
- 상위 스코프 탐색은 함수가 작성된 위치에서부터 시작한다.
- 함수 내부에서 사용된 변수를 찾을 때, 먼저 함수 내부를 확인하고, 없으면 상위 스코프(함수를 포함하는 외부 스코프)로 올라가면서 찾는다.
this와 정적 스코프의 차이
this는 함수의 호출 방식에 따라 바뀌는 반면,
정적 스코프는 함수의 호출 방식에 영향을 받지 않고, 코드 작성 시점에 결정된다.
this는 정적 스코프와 다르게 함수의 호출 방식에 따라 결정된다.
const test = function() {
function test2() {
return this;
}
return test2();
};
console.log(test());
분석
- test2()는 정의된 시점에 상위 스코프가 test 함수임. (정적 스코프)
- 그러나 this는 함수를 호출한 객체를 가리키므로, test2를 호출한 주체가 중요.
- test() 함수 내에서 test2()는 호출 주체가 명시되지 않았으므로,
- 기본적으로 전역 객체(window 또는 globalThis)를 가리킨다. (엄격 모드에서는 undefined)
실행 결과
- 브라우저 환경: 전역 객체 window 출력.
- Node.js 환경: 전역 객체 global 출력.
<결론>
- 정적 스코프는 함수가 정의된 위치로 결정된다.
- 반면, **this**는 함수 호출 시점의 호출 주체에 따라 동적으로 결정된다.
728x90
반응형