본문 바로가기
JAVASCRIPT

자바스크립트(javascript) 변수

by 웨브개바르자 2023. 1. 22.

var는 변수선언과 동시에 초기화 되면서 undefind가 찍힘

 

let, const (es6 이후 버전)

var (es6이전 버전, 이제 안 쓰는 것 추천)

 

var : 한번 선언된 변수를 다시 선언할 수 있다.

var name = '제니';

var name = '래리';

 

let : 한번 선언된 변수를 다시 선언할 수 없다.

let name = '제니';

let name = '래리';

=> 에러!

 

var : 선언하기 전에 사용가능...호이스팅 되기 때문

호이스팅(hoisting) : 처음에 자바스크립트가 실행될때 미리 변수와 함수 선언해놓음.

하지만 아래와 같이 선언했을때 에러는 아니지만 name 콘솔에 undefined 찍힘

[실제]

console.log(name);

var name = '래리';

 

[호이스팅하면서 마치 이런 꼴로 인식됨]

var name;  1. 변수 선언하면서 호이스팅 되면서 초기화로 undefined 넣어줌

console.log(name); 여기서 에러 안나고 undefined가 찍히고

name = '래리';  2. 여기서 값이 할당됨

 

 

let : 에러. 

[실제]

console.log(name);

let name = '래리';

 

[호이스팅하면서 마치 이런 꼴로 인식됨]

let name;  1. 변수선언하면서 호이스팅됨

console.log(name); 2. 아직 초기화 안됐음. 그러니까 에러.

name = '래리'; 

 

변수의 생성과정

초기화단계 : undefined를 할당해주는 단계

 

var 1. 선언 및 초기화 단계  : 변수가 선언되면서 호이스팅하면서 undefined로 초기화되니까

                                              변수에 값을 할당해주기 전에 콘솔로 찍어도 undefined가 들어가 있으니까 에러 안남

      2.할당단계

 

let  1. 선언 단계 : 변수가 선언되면서 호이스팅 함

      2. 초기화 단계 : 실제 코드에 도달했을때 됨. var처럼 미리 되는게 아님.

      3. 할당단계

 

const 1. 선언 + 초기화 + 할당

 

let name;

name = '래리';    O.K

 

var name;

name = '래리';    O.K

 

const name;

name = '래리';    에러. WHY? 선언과 동시에 값을 할당안해서.

 

const name = '래리';   이렇게 해야함

 

 

스코프(Scope)

 

var : 함수스코프

- 함수 내에서 선언된 var 변수는 그 함수 내에서만 사용가능하다

- 따라서 function(){   } 외에 if문,while문 등에서는 {  } 안에 변수 선언하고 {  } 밖에서도 사용가능

 

let, const : 블록스코프

- 함수,if문,for문,while문 등등  {   } 내에서만 사용가능

 

const age = 30;

if(age > 19) {

   var txt = '성인'; //  if문 안에서 var로 변수선언

}

console.log(txt); //  if문 밖에서 사용 -> var는 가능, let, const였다면 불가능

                              왜냐면 var는 함수스코프니까 만약에 if문 아니고 함수(function)였다면 불가능

 

 

 

댓글