대부분의 프로그래밍 언어에는 스코프가 존재하며, 사용방식이나 의미도 조금씩 다르다. 총괄적으로 변수 접근에 대한 범위를 말한다.
함수 스코프란 새로운 함수가 생성될 때 마다 새로운 스코프가 발생하는 것을 말한다. 해당 함수 내에서 선언된 변수는 그 안에서만 접근이 가능하다. 어디에서든 접근 가능한 전역변수 역시도 자바스크립트에서는 글로벌 함수 내에서 선언한 변수로 나타낸다.
함수가 생성될 때 마다 새로운 실행 컨텍스트가 생성된다는 말은 즉, 함수가 생성되지 않은 영역은 모두 동일 실행 컨텍스트라는 말이 된다. 따라서 이러한 문제가 발생할 수 있다.
if(true) {
var secret = '12345';
}
secret // '12345'
자바스크립트는 변수의 무분별한 재사용과 업데이트를 방지하기 위해 es6 이후 let, const 를 추가하여 외부 블록에서 블록 내부 변수에도 접근하지 못하도록 한다.