자바스크립트는 함수 스코프를 가지고 있다. 함수를 생성할때마다 새로운 실행 컨텍스트가 생성되고 각 실행 컨텍스트마다 고유한 변수 환경을 가지고 있다. 그러나 대부분의 다른 프로그래밍 언어에는 블록 스코프라는 것이 존재한다.
그것들의 차이는 무엇일까?
if ( 5 > 4 ) {
var secret = '12345';
}
secret; // 12345
function a() {
var secret2 = '12345';
}
secret2 ; // secret2 is not defined
위와 같은 자바스크립트 코드가 있다고 가정해보자. 자바스크립트는 함수 스코프를 사용하기 때문에 secret
이라는 변수에 접근할 수 있다. 반대로 만약 블록 스코프를 사용했다면 {}
내부에 선언된 변수를 참조하려고 할 때 에러가 발생했을 것이다.
그러나 ES6에서 let
과 const
키워드를 사용해서 블록 스코프를 사용할 수 있게 되었다.
if( 5 > 4 ) {
let secret = '12345';
const secret2 = '12345';
}
secret; // secret is not defined
sercret2; // secret2 is not defined