Back to the JavaScript

JS 변수선언 / var (hoisting) / let / const

Backcoder 2022. 7. 27. 20:12

[ 변수 선언 / 할당 ]

 

<토큰> 
var / i / = / 10 
하나하나를 다 토큰이라 부른다. 

 


1. < var >

var  i  = 10; 

: 변수선언 / 할당 

 

- 자바와 마찬가지로 = 는 대입, 할당 의미. 

- 여러개 한번에 가능 
var a=1, b=2, c=3; 


var i;  이렇게만 선언 만 해두면, 
=> undefined 할당된 상태 

 i = 20; 

(- 자바에서처럼 재할당)  => 20 출력됨 
 

+ 추가기능

 

< 전역변수 역할 > 

변수 선언 없이 바로 

a = 100;  이렇게 할당하면 

JS가 자동으로 전역변수 위치에 ( 모두 적용될 수 있는 위치 ) 

 

var a; 

 

를 선언한 것으로 간주한다. 

 

즉, 

a = 100; 

var a = 50; 

=> 50 

이런식의 순서로도 사용이 가능해져 버린다.  

 

 

 

< Hoisting >: 변수 선언의 끌어올림  

- 이처럼, 변수가 선언되지도 않았는데 다짜고짜 

console.log( x ); 이렇게 사용해도 오류를 내지않고 진행이 되는건  

var x; 를 전역변수 위치에 자동으로 선언된 것으로 간주 해버리는 

Hoisting 기능 때문이다.


변수가 프로그램 첫머리에 선언된 것처럼 사용할 수 있는 기능 
- 선언만 가능. 

- 할당된 값은 불가능. 

 

- 함수도 hoisting 된다. 
f1(); 호출부터하고 
나중에 
function f1(){} 정의해도 
실행된다. 

 

 

이러면, 오히려 헤깔릴 여지가 많아,

최근에 이런 순서로는 사용이 안되도록 막아버린 새로운 변수가 등장 (ECMA6) 

사실상 var 는 버려져가는 추세이다.  

 

React / View / Node.js 에서는 
var 안쓰고 let / const 로만 사용한다 

 

 
2. < let > ( emca6 추가 키워드 ) 

let i = 10;  

- var 은 전역, 지역 변수 구별이 없으니까 헤깔릴 수 있으니까 
 자바처럼 순서 지키면서 사용하려면 let 사용해라 

a2 = "10"; 
let a2 = "20";
doc.write( a2 ); 
=> 오류 선언이 먼저 되야 함 )

let a2 = "20";  선언 / 할당 
a2 = "10";  재할당
doc.write( a2 ); 
=> 성공 ( 10 ) 



3. < const >

const i = 10; ( emca6 추가 ) 

- 한번 선언, 할당한 (초기화) 값은 수정 불가능

const a3 = 10;
a3 = 20; 
document.write( a3 );
=> 오류 ( 수정불가 )


 
되도록, let 과 const 를 최대한 사용하면서 익숙해 져야겠다. 

(이미 var 이 쓰인 부분에 대한 이해를 위해 hoisting 인지도 필요)