- var, let, const2024년 08월 08일
- chantleman
- 작성자
- 2024.08.08.:08
변수 키워드 3종
var함수 범위 유효(function scope)
재선언, 재할당 모두 가능 >> 개발자 간 오류 발생 가능성이 높아 사용을 지양
- 키워드 생략을 허용 >> 의도치 않은 전역화 발생
- 중복 선언 허용 >> 의도치 않은 값 변경
- 호이스팅 적용 대상 >> 선언 이전 참조 가능의 비정상적인 코드 흐름 발생
(호이스팅: 변수선언 후에 사용해야되는데, 선언 전에 사용해도 에러 발생시키지 않고 실행시킴)
협업 중 개발자간 혼란과 코드 복잡도 증가를 보완하기 위한 새로운 키워드 도입(ES6)
let블록 범위(중괄호) 유효(block scope)
재선언 불가 >> 이미 사용중인 변수에 다른 값을 할당하여 발생될 예외를 차단
재할당만 가능
변수 사용전까지 초기화 되지 않음(선언과 초기화의 분리)
const블록 범위 유효(block scope)
재선언, 재할당 모두 불가const는 상수를 선언해야하기 때문에 변하는 값을 지정하면 안됨
재할당 즉, 변하는 값으로 지정하기 위해서는 const가 아니라 let을 사용
const는 무조건 선언을 해줘야함
const isCheck;
따라서 위 코드는 안됨. const가 아닌 let으로 바꿔줘야함
선언 시 반드시 값이 할당되어야 함 (=초기화하지 않으면 에러 발생)
보통 대문자를 사용해서 선언 (강제는 아님, ex. const NUM = 7;)
변하지 않는 값(상수)을 갖는 변수 생성 (=값을 재할당 할 수 없는 읽기전용 변수, 상수 변수)
*참조타입(Array, Object, Function)에 사용 추천 >> 참조 타입은 주소를 참조하기 때문에 값 변경이 가능const a = {name:"minsu"}; a = {name:"chulsu"}; a.name="gildong";
const이기 때문에 a 자체를 바꿀 수 없음
하지만 {} 안의 내용물은 바꿀 수 있음
따라서 a의 name이 chulsu로 바뀌지 않지만, gildong으로는 바뀜!
배열, 리스트는 크기가 계속 변하기 때문에 const가 아닌 let으로 선언해야함
heap은 원시타입이 아닌 타입들이 저장되는 공간.
heap은 갑자기 데이터가 커질수도 있는 배열과 객체와 같은 정렬되지 않은 데이터들을 저장할 수 있다는 점이 포인트
여기서 변경이란 배열에 push로 값을 넣는것이 아닌, 메모리 주소의 변경을 뜻함
원시타입 값 변경은 값 자체를 변경하는 것이 아니라 주소를 변경하는 것임
let은 메모리의 주소 변경을 허락하지만, const는 메모리 주소를 변경할 수 없음
따라서 const a = 1처럼 원시타입으로 지정된 것은 변경할 수 없지만
const a ={name:"췐틀맨"}이면 a.name은 참조타입이라서 변경할 수 있음(a자체가 바뀌는 것은 불가)
참조타입은 주소를 참조하기때문에 값변경이 가능
728x90다음글이전글이전 글이 없습니다.댓글