ES6 문법 - let & const

김동현·2023년 8월 13일
0

JavaScript

목록 보기
4/11
post-thumbnail

let 구문

let 구문은 블록 유효 범위를 갖는 지역 변수를 선언하며, 선언과 동시에 임의의 값으로 초기화할 수도 있다.

let num = 10;
​
if (num == 10) {
  let num = 25;
  console.log(num); // 25
}
​
console.log(num); // 10

유효 범위 규칙

let 으로 선언된 변수는 변수가 선언된 블록 내에서만 유효하며, 당연하지만 하위 블록에서도 유효하다. 이러한 점에서는 let 과 var 는 유사하지만, var 는 함수 블록 이외의 블록은 무시하고 선언된다는 점이 다르다.

let varTest = () => {
  var num = 1;
  ​
  if (true) {
    var num = 5; // 상위 블록과 같은 변수!
    console.log(num) // 5
  }
  console.log(num) // 5
}
let letTest = () => {
  let num = 1;
  ​
  if (true) {
    let num = 5; // 상위 블록과 다른 변수!
    console.log(num) // 5
  }
  console.log(num) // 1
}

프로그램이나 함수의 최상위에서는 let 과 var 은 서로 다르게 행동한다. let 은 전역 객체의 속성 값을 생성하지 않는다.

var x = 'Global';
let y = 'Global';
  ​
/* 전역 객체의 속성 x 를 생성 */
console.log(this.x) // 'Global'
  ​
/* 전역 객체의 속성 y 를 생성하지 않음 */
console.log(this.y) // undefined

오류(Error)

같은 변수를 같은 함수나 블록 범위 내에서 재선언하면 SyntaxError 가 발생한다.

if (true) {
  let mancity;
  let mancity; // SyntaxError thrown
}

ES6 에서 let 은 선언 끌어올리기(호이스팅)의 적용을 받지 않습니다. 이는 let 선언이 현재 실행되는 구간의 최상위로 옮겨지지 않는다는 것을 의미합니다. 따라서 변수가 초기화(선언)되기 전에 참조할 경우 ReferenceError 가 발생합니다. var 로 선언된 변수는 undefined 값을 가지는 것과는 대조적입니다.

let test = () => {
  console.log(kane); // undefined
  console.log(son); // ReferenceError
  ​
  var kane = 10;
  let son = 7;
}

정적 유효 범위로 인해, 표현 (foo + 55) 내부의 "foo" 는 33을 값으로 가지는 상위 블록의 foo 가 아니라 if 블록의 foo​ 로 해석됩니다. 해당 행에서 if 블록의 "foo" 는 이미 정적 유효 범위에 생성되었지만, 선언의 초기화가 완료(선언 구문의 종료)되지 않았습니다. 따라서 여전히 임시적인 사각 지역에 해당됩니다.

let test = () => {
  var foo = 33;
  if (true) {
    let foo = (foo + 55); // ReferenceError
  }
}
​
test()

const 구문

const 선언은 블록 범위의 상수를 선언합니다. 상수의 값은 재할당할 수 없으며 다시 선언할 수도 없습니다.

const number = 42;
​
try {
  number = 99;
} catch(err) {
  console.log(err); // TypeError: Assignment to constant variable.
}
​
console.log(number) // 42
profile
가치를 전달하는 개발자

0개의 댓글

관련 채용 정보