변수와 호이스팅

잔잔바리한접시·2022년 2월 20일
1

javascript

목록 보기
2/10
post-thumbnail

var

var는 한번 선언된 변수를 다시 선언할 수 있다.

var는 선언 및 초기화를 동시에 한다.
선언 후 초기값인 undefined를 할당해주는 단계인 초기화를 동시에 하기 때문에 할당 전에 호출하게 되면 에러가 아닌 undefined를 반환한다.

 var name = "hoon";
 console.log(name); //hoon
 
 var name = "kim"
 console.log(name); //kim

var는 선언하기 전에 사용할 수 있다.

console.log(name); //undefined
var name = "hoon";

undefined가 출력되는 이유는?
-> 코드가 동작할 때 변수의 선언과 초기화를 분리한 후, 선언만 코드의 최상단으로 옮기기 때문

var name; //hoisting을 통한 선언
console.log(name);
name = "hoon" //할당

let, const

let

let은 한번 선언된 변수를 다시 선언할 수 있다.

let은 선언과 초기화가 분리되어서 진행된다.
호이스팅을 통해 선언이 실행되지만 실제 초기화는 코드에 도달하였을때 진행된다.

let name = "hoon";
console.log(name); //hoon

let name = "kim"
console.log(name); //kim

let은 선언 전에 사용할 수 없다.
-> let과 const는 TDZ(Tempooral Dead Zone)의 영향을 받는다. TDZ는 코드를 예측 가능하게 하고 잠재적 버그를 줄인다.

	console.log(name); // TDZ로 인한 error
    let name = "hoon";

const

const는 한번 선언된 변수를 다시 선언할 수 없다.

const name = "hoon";
console.log(name); //hoon

const name ="kim"
console.log(name); //error

const는 선언과 초기화, 할당을 모두 동시에 진행한다.

const name; //error
name = "hoon";

스코프

var는 함수 스코프, let과 const는 블록 스코프다.

함수 스코프는 함수 내에서 선언한 변수는 같은 함수 안에서 유효하다.

블록 스코프는 변수가 선언된 코드 블록 안에서만 유효하다.
여기서 코드 블록은 함수, if문, for문, while문, try/catch문 등이 있다.

0개의 댓글