자바스크립트에서 스코프(Scope)란
스코프는 컨텍스트는 값 과 "표현식"이 "표현"되거나 참조 될 수 있는 현재 실행되는 컨텍스트를 의미합니다.
간단하게 말하면 유효범위가 스코프이다.
var x = 10;
function foo(){
var x = 1;
bar();
}
function bar(){
console.log(x);
}
foo();
bar();
처음 위 예제를 봣을때 foo함수 안에 bar함수가 잇으니까 직접 대입을 해보면
function foo(){
var x = 1;
console.log(x);
}
이렇게 되겠지? 라고 생각을 했다.
하지만 결과는 전역변수로 지정한 x의 값만 두번 출력되었다.
함수의 상위 스코프는 언제 결정하는지 생각해보면 2가지로 생각해볼 수 있다.
- 함수를 어디서 호출했는가
- 함수를 어디서 정의했는가
1번 방식은 동적으로 상위 스코프가 바뀌므로 동적 스코프라고 하며 2번 방식은 정의한 곳에서 상위 스코프가 바뀌지 않으므로 정적 스코프 또는 렉시컬 스코프라고 부른다.
위 코드에서 bar함수는 1번으로 본다면 foo함수 안에서 생성이 되었기 때문에 bar의 상위 스코프가 foo이므로 1과 10이 출력이 될것이고
2번으로 본다면 foo함수는 전역 코드에 정의가 되어 있으므로 bar의 상위 스코프는 전역 스코프가 되어 10과 10이 출력이 될 것이다.
정답에서 유추할 수 있듯이 자바스크립트는 2번 방식으로 함수의 상위 스코프를 정하게 됩니다.
'javascript' 카테고리의 다른 글
Prototype (0) | 2024.06.30 |
---|---|
일급 객체 (0) | 2024.06.29 |
객체 변경 방지 (0) | 2024.06.28 |
Property Attribute (0) | 2024.06.27 |
함수 생성시점과 함수 호이스팅 (0) | 2024.06.25 |