JavaScript

[15장] let,const, 블록 레벨 스코프

잼굴 2022. 2. 25. 14:21

전입 1개월 서당개

 

var 키워드의 문제점

1. 변수 중복선언으로 의도치않은 부작용

2. var키워드로 선언한 변수는 함수의 코드블록만 지역스코프로 인정

3. 변수 호이스팅으로 의도치않게 undefined를 반환하는 경우

 

 

 

let키워드 !

 

특징

1. 변수 중복 선언 금지

2. let 키워드로 선언한 변수는 모든 코드블록을 지역스코프로 인정하는 블록레벨스코프!

 

 

변수 호이스팅

 

console.log(foo); // ReferenceError
let foo;
 
-> 호이스팅이 안돼서 참조에러가 발생함.
 
 
 
var는 선언단계와 초기화단계가 한번에 진행돼서 undefined로 초기화해주는데
let은 선언단계랑 초기화단계가 분리되어서 진행됨
 
 

'

 

그 분리되는 구간을 일시적 사각지대 라고 부름

 

-> let 키워드는 변수호이스팅을 하지않는다??

     NO

 

 

let foo = 1;   // 전역변수
{
    console.log(foo); // ReferenceError
    let foo = 2;  // 지역변수
}

 

let키워드도 참조에러가 발생함

JS에서 let , const를 포함한 모든선언이 호이스팅을 함.

근데 ES6에서는 let, const, class를 사용한 선언문은 호이스팅이 발생하지 않는것처럼 동작함

 

 

 

const 키워드 !

 

특징

1. const는 선언과 동시에 초기화 해야함ㅋ

   const foo = 0;
 
 
2. const로 선언한 변수는 재할당 금지
 
3. 상수임을 나타내기위해 언더스코어(_)로 구분하는게 일반적
   
const TAX_RATE = 0.1;
 
4. const 키워드로 선언된 변수에 객체를 할당하면 값을 변경할수있다.
 
const person = {
    name: 'Lee'
};
// 객체는 변경 가능한 값이다. 따라서 재할당 없이 변경가능
person.name = 'kim';
console.log(person);  // {name: "Kim"}
 
 
 
🐌 변수 선언시 기본적으로 const를 사용, 재할당이 필요한 경우에만 let 사용하기.
 
     let키워드를 사용할때 변수 스코프는 최대한 좁게
    읽기전용으로 사용하는 원시값과 객체에는 const 키워드 사용하기
 
 
 

 

'JavaScript' 카테고리의 다른 글

this함수  (0) 2022.05.17
[16장] 프로퍼티 어트리뷰트  (0) 2022.03.08
[13장, 14장] 스코프 , 전역변수의 문제점  (0) 2022.02.25
[12장] 함수  (2) 2022.02.24
[10장] 객체 리터럴  (0) 2022.02.17