스코프(scope) = 식별자(identifier)가 유요한 범위 = 자바스크립트 엔진이 식별자를 검색할 때 사용하는 규칙

var var1 = 1;       // 코드의 가장 바깥 영역에서 선언한 변수

if (true) {
  var var2 = 2;     // 코드 블록 내에서 선언한 변수
  if (true) {
    var var3 = 3;   // 중첩된 코드 블록 내에서 선언한 변수
  }
}

function foo() {
  var var4 = 4;     // 함수 내에서 선언한 변수

  function bar() {
    var var5 = 5;   // 중첩된 함수 내에서 선언한 변수
  }
}

console.log(var1);  // 1
console.log(var2);  // 2
console.log(var3);  // 3
console.log(var4);  // ReferenceError: var4 is not defined
console.log(var5);  // ReferenceError: var4 is not defined

식별자 결정

식별자 결정(identifier resolution) = 자바스크립트 엔진이 이름이 같은 두 식별자 중에 어떤 식별자를 참조해야 할 것인지를 결정하는 것

var x = "global";

function foo() {
  var x = "local";
  console.log(x);   // local
}

foo();          
console.log(x);     // global

Untitled

PC에서 "동일한 파일 이름" 이 스코프를 통한 식별자 결정 가능의 예시 중 하나이다.
= "다른 폴더" 간에 "동일한 파일 이름"은 다른 파일로 식별하고 생성 가능

스코프의 종류

변수는 자신이 선언된 위치에 의해 자신이 유요한 범위인 스코프가 결정된다.