함수를 작성할 때 아래와 같이 중괄호 '{ }' 를 이용하여 함수의 범위를 작성합니다.
즉, 변수가 영향을 미치는 범위, 변수의 유효 범위, 코드가 유효한 범위 라고 할 수 있으며 규칙입니다. 그리고 스포프의 종류에따라 변수, 함수, 코드 등의 유효 범위가 달라질 수 있습니다.
동작
정적 스코프(Static Scope) 또는 렉시컬 스코프(Lexical Scope)
동적 스코프(Dynamic Scope)
레벨
함수 레벨 스코프(Function level Scope)
블록 레벨 스코프(Block level Scope)
전역 스코프(Global Scope)
지역 스코프(Local Scope)
추가로 알아야 할 사항
스코프 체인(Scope Chain)
⚠️ 스코프가 단순히 범위라고만 알고 있으면 안 되는 이유는 선언의 시점에 따라 값이 달라질 수 있기 때문입니다. 그래서 동작에 따라 나뉘는 정적 스코프, 동적 스코프가 존재합니다.
⚠️ 자바스크립트를 비롯한 대부분의 프로그래밍 언어는 렉시컬 스코프, 즉 정적 스코프를 따른다.
JavaScript는 정적 스코프의 특성을 가지고 있습니다. 정적 스코프의 규칙에 따라 호출 스택과 관계없이 선언 시점에 스코프를 결정합니다. (★ Closure 함수의 스코프 체인의 결정 범위)
즉 함수가 만들어진 위치.
let apple = "apple";
function fruit() {
let apple = "banana";
eat();
}
function eat() { *// 함수 선언 시점*
console.log(apple);
}
fruit(); *// apple*
eat(); *// apple*
→ 여기서 eat() 의 상위 스코프는 무엇인가? → 전역 스코프가 된다. 그래서 apple의 값은 'apple' 이다.