var let const

욱2·2023년 9월 9일
0

JS

목록 보기
13/14

var:

  • 함수 스코프를 가집니다. 함수 내에서 선언된 변수는 함수 내 어디서든 접근 가능합니다.
    호이스팅 현상이 발생합니다. 변수 선언은 코드의 맨 위로 끌어올려지며 초기화는 그 위치에서 이루어지지 않으면 undefined로 설정됩니다.
    재선언이 가능합니다.

let:

  • 블록 스코프를 가집니다. {} 내에서 선언된 변수는 해당 블록 내에서만 접근 가능합니다.
    호이스팅 현상이 발생하지만, 초기화는 호이스팅되지 않으며 변수는 선언 위치까지만 접근 가능하고 초기화는 실제 할당 위치에서 이루어집니다.
    재선언이 불가능합니다.

const:

  • let과 마찬가지로 블록 스코프를 가집니다.
    호이스팅 현상이 발생하지만, 초기화 역시 호이스팅되지 않으며 변수는 선언 위치까지만 접근 가능하고 초기화는 실제 할당 위치에서 이루어집니다.
    변수에 할당한 값을 변경할 수 없으며, 상수로서 사용됩니다.
console.log(x); // undefined (var 호이스팅)
var x = 10; //선언 + undefined로 초기화

console.log(y); // ReferenceError: y is not defined 
(let 호이스팅은 변수를 선언하지만 초기화하지 않음)
let y = 20; // 초기화 위치 그전 y 는 tdz에 위치한다.

console.log(z); // ReferenceError: z is not defined (const도 let과 동일)
const z = 30;

tdz에 있는 변수 사용시 ReferenceError 발생.

let a = 10;  // 전역변수 a선언

if(true){
    console.log(a); // 10
}

선언 초기화 할당이 되면서 전역변수가 참조된다

let a = 10;  // 전역변수 a선언

if(true){
    console.log(a);  // ReferenceError: a is not defined
    let a = 20;  // 지역변수 a 선언
}

지역변수 a 선언되며 tdz에 위치하고 ReferenceError를 보낸다.
지역변수가 전역변수보다 우선 순위를 갖기 때문에 전역변수가 있어도 블록스콥 안에 있는 a 가 먼저 참조된다.

profile
성장하는 날 위한 기록

0개의 댓글

관련 채용 정보