Scope란 자바스크립트가 변수에 접근이 가능한지 결정하는 현재의 컨텍스트를 의미합니다. 만약 변수나 다른 표현식이 스코프내에 있지 않다면 자바스크립트로 접근이 불가능 합니다. 스코프는 계층적인 구조를 가지고 있기 때문에 하위 스코프에서 상위 스코프로 접근은 가능하지만 상위 스코프에서 하위 스코프로는 접근이 불가능 합니다.
만약 아래와 같이 함수 내부에서 선언한 변수를 밖에서 접근하려고 할 경우 에러가 발생하게 됩니다. 왜냐하면
변수 a는 함수 내에서 선언되었고 함수는 자바스크립트에서 클로저 역할을 해 스코프를 생성합니다. 그렇기 때문에 2번째 console.log(a)의 경우는 스코프 밖에서 접근하려 했기때문에 에러가 발생하게 되었습니다.
function asdf() {
let a = "inside the function"
console.log(a)
}
console.log(a) // 에러 발생
아래의 변수 a는 전역에서 선언되었기 때문에 함수 안에서 호출이 가능합니다. 하위 스코프에서는 상위 스코프로 접근이 가능하기 때문에 에러가 발생하지 않습니다.
let a = "Global"
console.log(a);
function asdf() {
console.log(a);
}