15장 let, const 키워드와 블록 레벨 스코프 (JS Deep Dive)

January·2022년 7월 31일
0
post-thumbnail

let 키워드

변수 중복 선언

중복 선언이 가능하다면 의도치 않게 먼저 선언된 변수에 재할당되어 부작용이 발생한다. let 키워드는 이름이 같은 변수를 중복 선언하면 syntaxError가 발생한다.

블록 레벨 스코프

모든 코드 블록(함수, if문, for문, while문, try/catch문 등)을 지역 스코프로 인정한다.

변수 호이스팅

선언 단계와 초기화 단계가 분리되어 진행된다. 초기화 단계는 변수 선언문에 도달했을 때 실행된다. 선언된 변수는 스코프의 시작 지점부터 초기화 단계 시작지점까지를 일시적 사각지대라고 부른다.

let foo = 1;

{
  console.log(foo);  // ReferenceError: Cannot access 'foo' before initialization
  let foo = 2;  // 지역 변수  
}

결국 let 키워드로 선언한 변수는 호이스팅이 발생하지 않는 것처럼 보인다.

자바스크립트 ES6에서 도입된 let, const를 포함해서 모든 선언을 호이스팅한다. 단, let과 const는 호이스팅이 발생하지 않는 것처럼 동작한다.

전역 객체와 let

var 키워드로 선언한 전역 변수, 전역 함수, 암묵적 전역은 전역 객체 window의 프로퍼티가 된다. let 키워드로 선언한 전역 변수는 전역 객체의 프로퍼티가 아니다. 보이지 ㅇ낳는 개념적인 블록 내에 존재하게 된다.

const 키워드

const는 상수를 선언하기 위해 사용한다.

선언과 초기화

const 키워드로 선언한 변수는 반드시 선언과 동시에 초기화해야 한다.

console.log(foo);  // SyntaxError: Missing initializer in const declaration 

const foo;

// 선언과 동시에 초기화한다.
console.log(foo);  // ReferenceError: Cannot access 'foo' before initialization 

const foo = 1;

재할당 금지

const는 재할당이 금지다.

상수

const 키워드로 선언한 변수에 원시 값을 할당한 경우 변수값을 변경할 수 없기 때 문에 상수를 표현하는 데 사용하기도 한다. 변수의 상대 개념인 상수는 재할당이 금지된 변수를 말한다.

const 키워드와 객체

const 키워드로 선언된 변수는 변경 가능한 값인 객체가 재할당 없이도 직접 변경 가능하다. 재할당을 금지할 뿐 '불변'을 의미하지 않는다.

0개의 댓글