스코프(Scope)란 ❓
스코프(Scope)란 ‘변수에 접근할 수 있는 범위’라고 간단하게 축약할 수 있다
자바스크립트 스코프는 Global(전역)과 Local(지역) 2가지 타입이 있다. .
전역 스코프(Global Scope)는 말 그대로 전역에 선언되어있어 어느 곳에서든지 해당 변수에 접근할 수 있다는 의미이고
지역 스코프(Local Scope)는 해당 지역에서만 접근할 수 있어 지역을 벗어난 곳에선 접근할 수 없다는 의미이다.
자바스크립트에서 함수를 선언하면 함수를 선언할 때마다 새로운 스코프를 생성하게 됩니다.
그러므로 함수 몸체에 선언한 변수는 해당 함수 몸체 안에서만 접근할 수 있는데
이걸 함수 스코프(function-scoped)라고 한다. 함수 스코프가 바로 지역 스코프의 예라고 할 수 있다
var name = KimJiWoo; // 전역 스코프
function Scope() { // 지역(함수) 스코프
var name = JiWoo;
console.log(name);
}
Scope(); // 지역(함수)스코프를 호출함 => JiWoo
console.log(name); // 전역 스코프를 호출함 => KimJiWoo
Scope 함수에서 console.log(name);는 name을 출력하기 위해 자신의 함수 스코프 안에 변수 name가 있는지 찾아볼 것이다.
그러면 var name = JiWoo; 을 찾아내면 JiWoo를 console에 출력하고 함수는 자신의 사명을 다하게 된다.
만약 Scope 함수 안에 변수 name의 선언을 지운다면 console엔 어떤 값이 출력될까?
함수 스코프 안에 name이 존재하지 않으니까 name이 선언되어있지 않다는 에러를 출력할까?
한 번 Scope 함수를 다시 선언하고 실행해보자.
var name = KimJiWoo; // 전역 스코프
function Scope() { // 함수 스코프
console.log(name);
}
print(); // KimJiWoo
결과는 예상과는 다르게 전역 스코프에 선언되어있는 KimJiWoo가 출력되는 것을 볼 수 있다.
이는 Scope Chain에 의해 일어나는 현상인데, 현재 자신의 scope에서 사용하고자 하는 변수가 없다면 Scope Chain을 통해 해당 변수를 찾게된다.
'자바스크립트 - Vanilla JS' 카테고리의 다른 글
[자바스크립트 / Vanilla JS] this란 무엇일까 ? (0) | 2022.09.07 |
---|---|
[자바스크립트 / Vanilla JS] 객체와 객체 접근법 (점 표기법, 대괄호 표기법) (0) | 2022.09.07 |
[자바스크립트 / Vanilla JS] 함수 선언식 과 함수 표현식 (0) | 2022.08.01 |
[자바스크립트 / Vanilla JS] async / await 비동기 통신 (0) | 2022.07.21 |
[자바스크립트 / Vanilla JS] new 연산자와 생성자 함수 (0) | 2022.07.20 |