스코프의 정의는 식별자 접근 규칙에 따른 유효 범위라고 할수 있으며 여기서 범위는 { }(중괄호/블록) 또는 함수라고 할 수 있다. 그리고 중괄호 범위를 블록 스코프(Block Scope), 함수 범위를 함수 스코프(Function Scope)라고 한다.
변수 관점에서 스코프를 구분할 수도 있다.
{
const dog = "멍멍";
console.log(dog); // "멍멍"
}
console.log(dog); // ReferenceError: dog is not defined
{
let cat = "야옹";
console.log(cat); // "야옹"
}
console.log(cat); // ReferenceError: cat is not defined
위의 코드를 보면 const와 let은 블록 스코프를 따르므로 { } 안에서는 접근이 가능하여 각각 "멍멍","야옹"을 출력하지만 { } 밖에서는 정의되지 않았다고 오류를 낸다.
{
var dog = "멍멍";
console.log(dog); // "멍멍"
}
console.log(dog); // "멍멍"
반면에 var는 블록 스코프를 따르지 않기 때문에 { } 밖에서도 오류가 나지않고 값이 출력된다.
function animal() {
var cat = "야옹";
}
console.log(cat); // ReferenceError: cat is not defined
위의 코드에서 var는 블록 스코프를 따르지는 않지만 함수 스코프를 따르기 때문에 함수 내에서 정의된 cat에 접근하려고 하면 오류를 내는 것을 볼 수 있다.
참고한 사이트 :
https://hanamon.kr/javascript-%EC%8A%A4%EC%BD%94%ED%94%84%EC%99%80-%EB%B3%80%EC%88%98%EC%84%A0%EC%96%B8%ED%82%A4%EC%9B%8C%EB%93%9C-%EC%B0%A8%EC%9D%B4%EC%A0%90/
https://poiemaweb.com/js-scope
https://mong-blog.tistory.com/entry/%EB%B8%94%EB%A1%9D-%EC%8A%A4%EC%BD%94%ED%94%84-%ED%95%A8%EC%88%98-%EC%8A%A4%EC%BD%94%ED%94%84%EC%9D%98-%EC%B0%A8%EC%9D%B4-javascript?category=967416