cs 지식/basic of JavaScript

[JavaScript] 변수와 상수

귤먹는코더 2022. 6. 3. 21:15
728x90

변수와 상수

[변수 생성의 3단계]

선언 -> 초기화 -> 할당

- 선언: 실행 컨텍스트에 변수 객체를 등록

- 초기화: 변수 객체에 등록된 변수를 위해 메모리에 공간을 확보

- 할당: undefined로 초기화된 변수에 실제 값을 할당

 

var

 👉 var는 가급적 사용하지 않는 게 좋다.

  • var로 선언한  변수는 블록 스코프가아니라 함수 수준 스코프를 가진다.
  • var는 선언과 초기화를 한벙네 한다!
  • 재선언이 가능하다
  • 선언하기 전에도 사용할 수 있다.
  • 코드 블럭을 무시합니다. (var는 함수의 최상위로 호이스팅 된다. 선언은 호이스팅 되고 할당은 호이스팅 되지 않는다.)
// var name은 함수의 최상위로 호이스팅되기 때문에,
실행될 일 없는 구문 속에 있어도 선언이 됩니다.
(자바스크립트가 동작하기 전에 코드를 한 번 훑는데 그 때,
var로 선언된 코드를 전부 최상위로 끌어올려버립니다.
동작해선 안되는 구문이라도... 몽땅..!)

function cat(){
	name = "perl";
	// 이 if문 내로는 절대 들어올 일이 없죠!
	if(false) {
		var name;
	}
	alert(name);
}

cat();

 

let

  • 자바스크립트에서 변수를 생성할 때 쓰는 키워드
  • block-scope를 갖는다.              ->          {} 안에서 선언하면 {} 안에서만 쓰고 바깥에선 쓸 수 없다.
  • 재선언은 불가, 재할당은 가능
// 재할당은 가능!
let cat_name = 'perl';
cat_name = '펄이';

// 재선언은 오류!
let cat_name = 'perl';
let cat_name = '펄이';

 

const

  • 자바스크립트에서 상수를 생성할 때 쓰는 키워드
  • block-scope를 갖는다.
  • 재선언 불가, 재할당도 불가 ( => 선언과 동시에 할당한다!)
// 재할당 오류!
const cat_name = 'perl';
cat_name = '펄이';

// 재선언도 오류!
const cat_name = 'perl';
const cat_name = '펄이';

// 선언과 동시에 할당 되기 때문에 값을 안줘도 오류가 납니다.
// declare!
const cat_name;

 

TDZ(Temporal Dead Zone) = 일시적 사각지대

1) let과 const도 호이스팅이 될까?

👉 [간단하게 말하자면...]

var과 let, const의 차이점 중 하나는 변수가 선언되기 전에 호출하면 ReferenceError가 난다는 점이에요!

Q. 왜 에러가 날까? 호이스팅이 안 된 걸까?

A. 호이스팅(=선언 끌어 올리기)은 됩니다! 다만, 선언한 후, 초기화 단계에서 메모리에 공간을 확보하는데, 선언을 호이스팅해도 초기화 전까지 메모리에 공간이 없죠! 그래서 변수를 참조할 수 없기 때문입니다. 이걸 TDZ라고 해요!

 

[2줄 요약]

→ 스코프에 진입할 때 변수를 만들고, TDZ가 생성되지만 코드 실행이(=실행 컨텍스트가) 변수가 있는 실제 위치에 도달할 때까지 엑세스를 못할 뿐!

→ let, const 선언도 호이스팅 된다.

728x90

'cs 지식 > basic of JavaScript' 카테고리의 다른 글

[JavaScript] 객체  (0) 2022.06.03
[JavaScript] 자료형  (0) 2022.06.03