본문 바로가기
IT/JavaScript

자바스크립트 - let const var 특징(스코프, 호이스팅)

by 삐약 개발자 2024. 11. 17.

let const var 는 자바스크립트에서 변수를 선언할때 사용하는 키워드임.

 

var, let, const  변수 선언 차이

▷var

기본적으로 변수의 값을 재할당이 가능

변수의 선언만 호이스팅되며 초기화는 호이스팅 되지 않음

 

▷let

ES6 이후에 도입

const 와는 다르게 변수에 값을 재할당 가능

블록 스크프를 따르며 코드블록 내에서만 유효함

호이스팅이 발생하지만, 변수가 선언되기 전에는 사용할수 없음

 

▷const

ES6 이후에 도입

let 과는 다르게 변수에 값을 재할당 불가능

선언과 동시에 값을 할당해야 하며 그 이후에 값 변경 불가능함

let 과 동일하게 블록스코프를 따르며 코드 블록내에서만 유효

 

스코프란 ? 

변수에 접근할수 있는 범위이다.

즉 변수가 어떤 코드에서 읽고 쓸수 있는지 결정가능한 규칙임

 

크게 전역변수와 지역변수 두가지로 나뉨

 

안쪽 스코프에서 바깥쪽 범위로 접근 할수 있지만 반대는 불가능.

집합이랑 같은 원리라고 생각하면 편함

스코프는 중첩이 가능함

가장 바깥의 스코프는 전역 스코프라고 부름!!!

전역 스코프는 전체 코드에서 접근 가능한 영역을 의미함

그외는 지역 스코프!!

지역 변수는 전역변수보다 더 높은 우선순위를 가짐

 

스코프에서 var, let 의 특징

var는 블록 스코프를 무시하고 함수 스코프만 따름!! 

let const는 블록 스코프를 가져 모든 코드블록(if for while try/catch 등 포함)이 지역 스코프를 가짐!

 


호이스팅이란?

변수선언와 함수선언이 코드 실행전에 위로 끌어올려지는 현상을 말함

단 초기값은 호이스팅 되지 않음!

 

var 의 변수 선언과 함수 선언은 호이스팅이 일어남

즉 선어된 위치와 관계없이 접근할수 있음

단 변수 초기화는 호이스팅이 되지 않음 <- 이러한 이유로 var 를 사용하지 않기도함(?)

 

let  과 const 는호이스팅이 되지만 초기화 전에는 접근이 불가능

그렇기에 초기화가 이루어지기 전에 변수에 접근 하려고 하면 ReferenceError 가 발생함 

 

함수는 여러가지 종류가 있음

함수선언문, 함수표현식, 화살표 함수

함수 선언문은 호이스팅 가능 

단 함수 표현식과 화살표함수는 변수에 할당이 되는 형태로 정의가 되기에 호이스팅은 되지만 초기화가 이루어지기 전에 

호출하게 되면 ReferenceError 발생함