let
let 변수는 기존 var의 문제점을 개선했는데, 그 중 하나가 변수의 유효범위, 스코프이다.
보통의 언어에서 변수는 중괄호( { } )로 구분되는 블록단위로 유효범위가 정해지는데, 이 범위가 JS는 '함수의 블록' 에서만 유효했다.
ES5
if(1){
var a = 5;
}
console.log(a); // 5
다른언어라면 a가 로그로 찍었을 때 값이 나오지 않는게 맞다. 근데 JS 에서는 if 나 for문에서는 블록을 변수의 유효범위로 보지 않기 때문에 a가 전역변수로 선언되어 if문 밖에서도 값이 찍히게 되는 것이다.
ES6
if(1){
let a = 5;
}
console.log(a); // 레퍼런스에러가 뜨게 된다.
let키워드는 if든 for든 함수든 코드 블록 ( {...} )밖에서는, 안에서 정의한 변수의 유효범위를 벗어나므로 undefined된 변수가 된다. 그러므로 let 키워드로 변수를 선언하면 전역변수를 자신도 모르게 선언하지는 않을 수 있다.
'programming > javascript' 카테고리의 다른 글
[ES6] 파라미터 핸들링(parameter handling) (0) | 2018.02.06 |
---|---|
[ES6] 화살표 함수(Arrow functions) (0) | 2018.02.04 |
[ES6] 호이스팅(Hoisting) (0) | 2018.02.04 |
[ES6] 상수 const (0) | 2018.02.04 |
[ES6] 소개 (0) | 2018.02.04 |