[JS Log] 변수

2023. 10. 11. 14:22Trip to JavaScript

프로그래밍의 기본인 변수, 나는 변수 생성 과정을 훤히 다 아는가라고 자문했을때 예니오가 나왔다. 너무 쉬운 내용은 패스하고 당당하지 못했던 부분을 정리해본다.

4.1 변수란 무엇인가? 왜 필요한가?

> 변수는 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름을 말한다. 

> 직접 메모리 주소에 접근하는 것은 치명적인 오류를 발생시킬 가능성이 높기 떄문에 값의 위치를 가리키는 상징적인 이름인 변수를 붙여준다. 

> 변수에 저장된 값을 읽어 들이는 것을 참조라한다.

4.2 식별자

> 변수 이름을 식별자라고도 한다. 식별자는 어떤 값을 구별해서 식별할 수 있는 고유한 이름을 말한다.

> 식별자는 값이 아니라 메모리 주소를 기억하고 있다. 식별자로 값을 구별해서 식별한다는 것은 식별자가 기억하고 있는 메모리 주소를 통해 메모리 공간에 저장된 값에 접근할 수 있다는 의미다. 

4.3 변수 선언

var score

> 변수 선언문은 변수 이름을 등록하고 값을 저장할 메모리 공간을 확보한다.

> 확보된 메모리 공간에는 자바스크립트 엔진에 의해 undefined라는 값이 암묵적으로 할당된다.(초기화)

> 초기화 단계를 거치지 않으면 확보된 메모리 공간에는 이전에 다른 애플리케이션이 사용했던 값이 남아 있을 수 있다. 이런 값을 쓰레기 값이라고 한다.

 

나 > 변수 선언이 되면 실행컨택스트 안에서 렉시컬 환경이 있고 내부 렉시컬 스코프에 등록이 된다. 브라우저 환경에서 힙이라는 공간이 있는데 여기하고 무슨 차이인지 확인이 필요하다.

4.4 변수 선언의 실행 시점과 변수 호이스팅

console.log(score)

var score

 

> 변수 선언이 안되었는데도 레퍼런스 에러가 아닌 undefined가 뜬다. 이유는 코드를 읽어 나가는 런타임 이전에 변수 선언이 먼저 이루어지기 때문이다. 이 것을 평가 과정이라고 하고 미리  코드 선두에서 해석하는 것 같다고 해서 호이스팅이라고 부른다.

4.5 값의 할당

> 변수 선언은 소스코드가 순차적으로 실행되는 시점인 런타임 이전에 먼저 실행되지만 값의 할당은 소스코드가 순차적으로 실행되는 시점인 런타임에 실행된다.

> 선언문과 할당문을 같이 써도 처리는 따로 된다.

> 변수에 값을 할당할 때는 이전 값 undefined가 저장되어 있던 메모리 공간을 지우고 그 메모리 공간에 할당 값 80을 새롭게 저장하는 것이 아니라 새로운 메모리 공간을 확보하고 그곳에 할당 값 80을 저장한다는 점이다.

나 > 책에 나온 예제인데 내 예상이 맞다면 이와 같이 작동했을 것이다. 처음 score 콘솔은 score 선언문을 읽고 초기화를 진행했을 것이다. 그래서 undefined가 나오고 런타임을 이어가다보면 score 할당문이 나와 80을 새로운 메모리에 저장한다. 마지막 콘솔은 이 값을 읽어 80이 나온다. 여담으로 score = 80 같은 단순 할당문으로도 score가 전역 객체에 바인딩되는데 여기서 score를 변수로 안부른다고 했던 것 같다. 

4.6 값의 재할당

> const는 재할당이 안된다.

4.7 식별자 네이밍 규칙

> const는 재할당이 안된다.

'Trip to JavaScript' 카테고리의 다른 글

[JS Log] 배열  (1) 2023.10.08
[JS Log] ES6 함수의 추가 기능  (1) 2023.10.08
[JS Log] 프로미스  (1) 2023.10.07
[JS Log] Ajax  (0) 2023.10.07
[JS Log] 비동기 프로그래밍  (1) 2023.10.07