스코프는 참조 대상 식별자(identifier, 변수, 함수의 이름과 같이 어떤 대상을 다른 대상과 구분하여 식별할 수 있는 유일한 이름)를 찾아내기 위한 규칙이다. 식별자는 자신이 어디에서 선언됐는지에 의해 자신이 유효한 범위를 갖는다.
varx='global';functionfoo(){varx='function scope';console.log(x);}foo();// 'function scope'console.log(x);// global
이름이 같은 변수 x가 중복 선언되어있는 예시이다. 전역으로 선언된 x는 어디에서든 참조할 수 있지만 foo 함수 내부에서 선언된 x는 내부에서만 참조할 수 있고, 함수 외부에서는 참조할 수 없다. 이러한 규칙을 스코프라고 한다. 모든 변수는 스코프를 가진다.
전역 스코프 ( Global Scope ) : 코드 어디에서든지 참조 가능
지역 스코프 ( Local Scope or Function-Level Scope) : 함수 코드 블록이 만든 스코프로 함수 자신과 하위 함수에서만 참조 가능
타 언어는 블록 레벨 스코프 ( block-level scope )를 따른다. 하지만 자바스크립트는 **함수 레벨 스코프( function-level scope ) **를 따른다. 함수 레벨 스코프란 함수 코드 블록 내에서 선언된 변수는 함수 코드 블록내에서만 유효하며, 함수 외부에서는 유효하지 않다.
단, ECMAScript 6에서 도입된 let 키워드를 사용하면 블록 레벨 스코프를 사용할 수 있다.