Scope란 변수에 접근할 수 있는 범위를 말한다.
scope의 2가지 타입
전역스코프란 전역에 선언되어있어 어느 곳에서든지 해당 변수에 접근할 수 있는 것이며,
지역스코프는 해당 지역에서만 접근할 수 있어 지역에서 벗어난 곳에서는 접근을 하지 못하는 것이다.
자바스크립트에서는 함수를 선언하고 선언할 때마다 새로운 스코프가 생기게 되는데 이를 함수스코프라고 부르며 지역스코프에 해당한다.
const age = 0 //전역스코프
function people() { //지역(함수)스코프
const age = 20
console.log(age)
}
people() //20
위의 예제에서 people() 함수를 실행했을 때 지역스코프 안에서 console.log(age)가해당 값을 찾기 때문에 20이 출력되는 것을 볼 수 있다.
여기서 const age = 20을 지워보면 함수가 실행될 때 console.log(age)는 값을 찾지 못하는 결과가 발생할까?
const age = 0 //전역스코프
function people() { //지역(함수)스코프
console.log(age)
}
people() //0
위의 예제 결과로는 0이 결과값으로 나타난다.
이것은 Scope Chain
에 의해서 나타나는 현상이다
Scope Chain이란 해당 스코프에서 자신이 사용하고자 하는 변수가 없다면 상위 스코프를 찾아가는 것을 말한다.
따라서 0의 결과값이 나타난 이유는 지역스코프에서 변수가 없어서 상위 스코프인 전역스코프로 이동하여 결과값을 찾아낸 것이다.
📌 참고: Closure란 함수가 자신의 내부가 아닌 외부에서 선언된 스코프에 접근하는 것을 말하며, Closure란 안에 정의된 함수는 만들어진 환경을 기억한다.