본문 바로가기
국비/JavaScript

JavaScript_변수(var, let, const)

by haheaven 2021. 10. 13.

 

 

- 변수

: 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름(값의 위치를 가리킴)

 

- 변수 선언

:  변수를 생성, 값을 저장하기 위한 메모리 공간 확보, 확보된 메모리 공간의 주소를 연결해서 값을 저장할 수 있게 준비하는 것

 


 

1) var 

①  함수 레벨 스코프(전역변수의 개념)

-> 변수명을 전역에서 사용하기 때문에 충돌이 일어날 수 있고, 메모리 낭비가 있으므로 let이나 const 키워드를 사용하는게 좋다.

 

 

② 선언하기 전 사용가능(호이스팅)

console.log(a) //undefined
var a;

console.log(b) //undefined
var b = 10;

 

 

③ 같은 변수명으로 재선언 가능 (덮어쓰기 개념)

var a = 10;
var a = 'Hello';
console.log(a);   // Hello

 

 

④ 저장된 값 수정 가능

var a = 10;
a = 'Hello';

console.log(a); // Hello

 

 

⑤ 선언 시 초기화를 생략 가능(undefined 상태)

   => 변수에 값을 할당하지 않아 메모리 공간이 비어있을 것 같아도 자바스크립트 엔진에 의해 undefined라는 값이 암묵적으로 할당되어 초기화 됨.

var a;
console.log(a) //undefined

 

* 자바스크립트 엔진 : 선언 단계 -> 초기화 단계(값을 저장하기 위한 메모리 공간을 확보하고 암묵적으로 undefined를 할당해 초기화)

 

 

 


 

 

2) let(ES6)

-> var 키워드의 단점을 보완하기 위해 ES6에 도입 

 

①  블록레벨({}) 스코프 (지역변수의 개념)

let a = 1; //전역변수

{
 let a = 2; //지역변수
 let b = 2;
}

console.log(a) // 1 -> 전역에서는 지역변수 참조 불가 
console.log(b) // ReferenceError : 지역변수로 전역에서 참조하므로 에러발생

 

 

 

②  선언하기 전에 사용하면 오류 발생

console.log(a); // ReferenceError
let a;

 

 

 

③  같은 변수명으로 재선언 불가능

let c = 12;
let c = 123333; // 불가능

 

 

 

④ 저장된 값 수정 가능

let c = 12344;
c = 11111; // 가능

 

 

 

⑤ 선언 시 초기화를 생략 가능 , 초기화 이전까지는 존재하지 않는 상태(메모리에 없음) 

  * 할당 전에 undefined로 초기화가 되지만, 메모리에 값을 올리진 않기 때문에 ReferenceError 발생 

console.log(foo);  //ReferenceError   //선언만 호이스팅(초기화는 x)

let foo;	   //선언과 초기화 실행 
console.log(foo);  // undefined

foo = 1;           // foo에 1을 할당
console.log(foo);  // 1

* 일시적 사각지대(TDZ) : 스코프의 시작 지점부터 초기화 시작 지점까지 변수를 참조할 수 없는 구간 

TDZ 

 

 


 

 

3) const(ES6)

* const 키워드로 선언한 변수는 반드시 선언과 동시에 초기화!

* 상수이므로 재할당 불가능

 

① 블록레벨({}) 스코프이다. (지역상수의 개념)

const a = 1;

{
 const a=10;
 
}
cosole.log(a); //1 => 전역변수 a의 값

 

 

 

② 선언하기 전에 사용하면 오류가 발생한다.

console.log(d); //ReferenceError

const d = 1;

 

 

 

③ 같은 변수명으로 재선언이 불가능하다.

const h = 10;
const h = 'hello'; //ReferenceError

 

 

 

④ 저장된 값을 수정할 수 없다. (상수)

const j = 10;
j = 123; //ReferenceError

 

 

 

⑤  선언 시 반드시 초기화를 해야 한다.

const f; // SyntaxError: Missing initializer in const declaration

'국비 > JavaScript' 카테고리의 다른 글

JavaScript _ 호이스팅  (0) 2021.10.13

댓글