스코프(Scope)의 정의

함수를 작성할 때 아래와 같이 중괄호 '{ }' 를 이용하여 함수의 범위를 작성합니다.

즉, 변수가 영향을 미치는 범위, 변수의 유효 범위, 코드가 유효한 범위 라고 할 수 있으며 규칙입니다. 그리고 스포프의 종류에따라 변수, 함수, 코드 등의 유효 범위가 달라질 수 있습니다.

스코프의(Scope)의 종류

⚠️ 스코프가 단순히 범위라고만 알고 있으면 안 되는 이유는 선언의 시점에 따라 값이 달라질 수 있기 때문입니다. 그래서 동작에 따라 나뉘는 정적 스코프, 동적 스코프가 존재합니다.

⚠️ 자바스크립트를 비롯한 대부분의 프로그래밍 언어는 렉시컬 스코프, 즉 정적 스코프를 따른다.

정적 스코프(Static Scope) 또는 렉시컬 스코프(Lexical Scope)

JavaScript는 정적 스코프의 특성을 가지고 있습니다. 정적 스코프의 규칙에 따라 호출 스택과 관계없이 선언 시점에 스코프를 결정합니다. (★ Closure 함수의 스코프 체인의 결정 범위)

즉 함수가 만들어진 위치.

let apple = "apple";

function fruit() {
  let apple = "banana";
  eat();
}

function eat() {  *// 함수 선언 시점*
  console.log(apple);
}

fruit(); *// apple*
eat();   *// apple*

→ 여기서 eat() 의 상위 스코프는 무엇인가? → 전역 스코프가 된다. 그래서 apple의 값은 'apple' 이다.

동적 스코프(Dynamic Scope)