진취적 삶
15 let,const 키워드와 block level scope 본문
15.1 var 키워드로 선언한 변수의 문제점
15.1.1 변수 중복 선언 허용
var x =1
var y =1
//중복 선언 허용
var x =100
var y;
console.log(x) //100
console.log(y) //1
15.1.2 함수 레벨 스코프
var 키워드로 선언한 변수는 오로지 함수의 코드 블록만을 지역 스코프로 인정
var x =1
if(true) {
//중복 허용
//if 문이니깐 함수가 아니여서 변수값이 변경되는 부작용
var x =10;
}
console.log(x)
for 문의 경우도 함수가 아니기 때문에 전역변수로 된다,
var i = 10 ;
for(var i =0; i<5; i++ ) {
console.log(i); //1 2 3 4
}
console.log(i); 5
15.2 let 키워드
15.2.1 변수 중복 선언 금지
var foo =123;
var foo =456;
let bar =123;
let bar= 456 ;
var 경우 가능하지만 let 키워드 같은경우 문법에러를 발생시킨다 .
15.2.2 블록 레벨 스코프
var 키워드는 함수 레벨 스코프인 반면 let 키워드는 블록 레벨 스코프이기에
모든 코드블록 (함수, if ,for ,while ,try) 지역스코프로 인정하는 block level scope 를 따른다.
15.2.3 변수 호이스팅
let 로 선언한 변수는 변수 호이스팅이 발생하지 않는것처럼 동작한다.
console.log(foo) //참조 에러 발생
let foo;
var 의 경우 런타임 이전에 선언단계와 초기화 단계가 한꺼번에 진행된다 .
선언 단계에서 스코프에 변수 식별자를 등록해 js엔진에 변수의 존재를 알리고
즉시 초기화 단계에서 undefined로 변수를 초기화
let 키워드로 선언한 변수는 선언 단계와 초기화 단계가 분리되어 진행한다.
초기화 단계 이전에 변수에 접근하려고 하면 참조에러가 발생한다.
일시적 사각지대 : 스코프의 시작 지점부터 초기화 시작지점까지 변수를 참조할수 없는 구간
15.2.4 전역 객체와 let
var 키워드로 선언한 전역변수, 전역 함수 는 전역 객체 window의 프로퍼티가 된다 .
let 키워드로 선언한 전역변수는 전역 객체의 프로퍼티가 아니다 .
즉 widnow.~로 접근할수 없다.
15.3 const 키워드
const 키워드는 상수를 선언하기 위해 사용한다.
15.3.1. 선언과 초기화
const 키워드로 선언한 변수는 반드시 선언과 동시에 초기화 해야한다.
15.3.2 재할당 금지
var ,let 은 재할당이 자유로우나 const 키워드는 재할당이 금지
const foo = 1;
foo =2 // error
15.3.3 상수
상수는 재할당이 금지된 변수를 말한다. 상수도 값을 저장하기 위한 메모리 공간이 필요하므로
변수라고 할수 있지만, 변수는 언제든지 재할당 가능 그러나 상수는 불가능이다.
상수는 상태 유지와 가독성 , 유지보수의 편의를 위해 적극적으로 사용해야 한다 .
상수의 이름은 대문자로 나타내고 여러 단어로 이뤄진 경우 _ 사용한다.
const TAX_RATE = 0.1
let preTaxPrice =100;
let afterTaxPrice = preTaxPrice + (preTaxPrice *TAX_RATE)
15.3.4 const 키워드와 객체
const 키워드로 선언된 변수에 원시값을 할당한 경우 값을 변경할수 없다
const 키워드로 선언된 변수에 객체를 할당한 경우 값을 변경할수 있다.
const 키워드는 재할당을 금지할 뿐 ‘불변’을 의미하지는 않는다 .
즉 프로퍼티 동적 생성,삭제, 변경을 통해 객체를 변경하는것은 가능
15.4 var vs let vs const
변수 선언에는 const 사용하고 let은 재할당이 필요한 경우에 한정적으로 사용하는것이좋다.
- ES6 을 사용한다면 var 키워드는 사용하지 않는다.
- 재할당이 필요한 경우에 한정해 let 키워드를 사용한다.
- 변경이 발생하지 않고 읽기 전용으로 사용하는 원시 값과 객체에는 const 키워드를 사용한다.
재할당이 필요한 경우가 별로없기에 우선 const로 하고 나중에 let 키워드로 변경
'개발 도서 > 자바스크립트 deepdive' 카테고리의 다른 글
13 스코프 (0) | 2023.07.11 |
---|---|
14 전역변수의 문제점 (0) | 2023.07.11 |
06 데이터 타입 (0) | 2023.07.11 |
07 연산자 (0) | 2023.07.11 |
08 제어문 (0) | 2023.07.11 |