본문 바로가기

개발/javascript

값의 할당

"값의 할당"

var score; // 변수 선언
score = 80; // 값의 할당

변수 선언문이 실행되면 메모리에 score라는 이름으로 일정 공간을 확보한다. 그 확보된 메모리 공간의 주소를 score라는 이름이 기억됨.

score가 기억하는 메모리 공간에 80이라는 숫자값을 할당한다.

 

= 는 할당연산자. 우측에 값이 오고 좌측에는 변수가 온다.

우측의 값을 좌측에 할당하는 것

첫 번째 변수 선언문은(var score;) 할당문은 없지만 암묵적으로 undefined로 초기화된다.

초기화 -> 생성된 변수에 처음으로 값을 할당하는 것

 

score라는 변수 이름이 메모리 주소가 undefined인 곳을 기억하고 있으니 그 주소에 undefined를 지우고 80을 넣으려 하지만 그렇게는 안된다. undefined는 원시값이라고 한다 => 한번 만들어진 원시값은 변경 불가능함

 

값을 할당하는 방법 => 이전에 기억하고 있던 메모리 주소가 아닌 새로운 메모리를 확보해 80을 저장한다.

이 변수 할당문(score = 80;) 이후에는 이전 메모리 주소에 접근 불가. 새롭게 저장한 80이라는 값에 접근하게 된다.

 

console.log(score); // undefined

score = 80; // 값의 할당
var score; // 변수 선언

console.log(score); // ?

 변수 호이스팅 : 변수 선언문이 다른 문들이 실행되기 전 먼저 실행되는 것

 

※실행순서 : 3 -> 1 -> 2 -> 4

3번째 줄의 var score;가 먼저 실행됨

1번째 줄의 console.log(score); 는 참조에러가 뜨지 않고, 변수 호이스팅에 의해 undefined라는 값을 출력함.

왜냐하면 변수가 생성되면 암묵적으로 undefined라는 값으로 초기화되기 때문에

2번째 줄은(score = 80;) 변수 할당문으로 한 줄씩 실행되는 시점(runtime)에 실행됨

즉, undefined를 가리키던 score가 80이라는 값이 저장된 새로운 메모리 공간 가리킴

3번째 줄은 스킵(이미 한번 실행됐기 때문)

4번째 줄은 이미 변수가 선언되었고, 80이라는 값도 할당됐기 때문에 80이라는 값이 출력됨

 

일반적으로 생각했을 때, 변수선언 -> 할당 -> 순서이지만, var키워드로 선언된 변수는 변수 호이스팅이 일어나기 때문에
이러한 순서를 지키지않아도 에러가 나지는 않는다.

변수 호이스팅의 학습 이유 : 이렇게 논리적으로 순서에 맞지 않게 코딩을 하더라도 동작할 수 있는 가능성이 있기때문에 변수 호이스팅을 잘 이해하고 코딩을 해야한다.

 

'개발 > javascript' 카테고리의 다른 글

식별자  (0) 2023.09.13
값의 재할당  (0) 2023.09.13
변수 호이스팅  (0) 2023.09.10
변수 선언  (0) 2023.09.10
변수  (0) 2023.09.10