JavaScript/JavaScript 중급

[JavaScript] 변수, 호이스팅, TDZ

J1woong 2024. 3. 5. 01:34
728x90
반응형
반응형

변수

https://dailyjiwoong.tistory.com/entry/JavaScript-%EB%B3%80%EC%88%98

 

[JavaScript] 변수

변수 변수는 어떤 정보에 이름을 붙여 저장할 때 사용한다. name = 'jiwoong'; age = 4; name 이라는 변수에는 'jiwoong' 이라는 값이 들어가고, age 라는 변수에는 4 라는 값이 들어간다. 이 때, 줄 마지막에

dailyjiwoong.tistory.com

 letconstES6 버전에 추가되었으며, 이전 버전까지는 var을 사용하여 선언했다.

 

var

 varlet이나 const와 다르게 한번 선언변수다시 선언할 수 있다.

var name = 'jiwoong'
console.log(name);
var name = 'messi'
console.log(name);

 

변수의 생성과정

 변수 3단계 생성과정을 거친다.

 1. 선언 단계

 2. 초기화 단계 (undefined 할당)

 3. 할당 단계

 

 ● var 선언 초기화 동시에 진행하고 마지막에 할당한다.

 ● let선언초기화분리되어 있다.

 ● const선언, 초기화, 할당동시에 이루어진다.

 

호이스팅

 호이스팅이란 스코프(유효범위) 내부 어디서든 변수 선언 가장 위에서 선언된 것처럼 동작하는 것을 말한다.

https://dailyjiwoong.tistory.com/entry/%EC%8A%A4%EC%BD%94%ED%94%84

 

스코프

스코프 유효범위를 뜻한다. 자바스크립트에서는 함수 스코프와 블록 스코프 개념이 존재한다. 자바스크립트에서 함수를 선언하면 새로운 스코프를 생성한다. 이를 함수 스코프라고 하며, 함수

dailyjiwoong.tistory.com

console.log(name);
var name = 'jiwoong';

 

 위 코드의 호이스팅을 시각화 하면 이렇다.

var name;
console.log(name);
name = 'jiwoong';

 

 var선언초기화동시에 진행되기 때문에 할당된 값이 아닌  undefined가 출력 된다. name이라는 선언호이스팅되지만 'jiwoong'이라는 할당은 그렇지 않기 때문이다.

 

 letconst호이스팅되지만, 같은 코드를 let이나 const로 작성하면 오류발생한다.

 이는 Temporal Dead Zone (TDZ) 때문이다.

https://dailyjiwoong.tistory.com/entry/TDZ

 

TDZ

TDZ (Temporal Dead Zone) 스코프 시작 지점부터 초기화 시작 지점까지의 구간. https://dailyjiwoong.tistory.com/entry/%EC%8A%A4%EC%BD%94%ED%94%84 스코프 스코프 유효범위를 뜻한다. 자바스크립트에서는 함수 스코프

dailyjiwoong.tistory.com

 

 letconstTDZ의 영향을 받는다. 이유는 다음과 같다.

 

 - let선언초기화분리되어 있기 때문에 선언호이스팅 되지만 실제 코드에 도달했을 때 초기화 된다.

 따라서 아래 코드는 오류발생한다.

console.log(name);
let name = 'jiwoong';

 

 - const선언, 초기화, 할당 동시에 이루어진다.

 아래 코드는 선언은 했지만 할당하지 않았기 때문에 오류 발생한다.

const name;
name = 'jiwoong';
728x90
반응형

'JavaScript > JavaScript 중급' 카테고리의 다른 글

[JavaScript] 문자열 메소드  (0) 2024.03.12
[JavaScript] Number, Math  (0) 2024.03.12
[JavaScript] 심볼  (0) 2024.03.08
[JavaScript] 객체 메소드, 계산된 프로퍼티  (0) 2024.03.07
[JavaScript] 생성자 함수  (0) 2024.03.06