🐊딥다이브를 공부하는 이유

그 동안 자바스크립트를 예제, 실습 위주로만 공부해왔습니다.
개인 프로젝트를 하면서 막히거나 모르는 부분이 있으면 그 때 구글링을 해서 배워가는 방식이었죠.
확실히 뇌리에 잘 박히고 학습 속도도 빠른 공부법이지만 그에 비해 CS 지식은 부족한 것 같아
틈틈히 책을 읽고 개념을 정리하려합니다.

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

자바스크립트 엔진의 작동방식과 변수의 정의

10 + 20

위의 식을 계산해볼가요


참 쉽쥬?
BUT 여기에는 치명적인 문제가 있습니다.
바로 연산 결과값인 30을 재사용할 수 없다는 것입니다.
이유!

  • 자바스크립트는 개발자의 직접적인 메모리 제어를 허용하지 않는다.
  • 그래서 임의로 결정된 메모리 주소를 알 수 없다. (코드가 실행될 때마다 메모리 주소가 변경됨)

그럼 메모리 공간을 확실하게 정해주면 되지 않을까요?

🍧변수는 하나의 값을 저장하기 위해 확보한 메모리 공간 혹은 메모리 공간을 식별하기 위해 붙여진 이름입니다.

var result = 10 + 20
  • 변수에 값을 저장 : 할당
  • 변수에 저장된 값을 읽기 : 참조

4.2 식별자

🍧식별자(identifier)는 어떤 값을 식별할 수 있는 고유한 이름입니다.
식별자는 값이 저장되어 있는 메모리 주소를 기억하고 있습니다.

  • 식별자의 존재를 알리는 방법 : 선언(declaration)

4.3 변수 선언

🍧변수 선언: 메모리 공간을 확보하고 변수 이름과 확보된 메모리 주소를 연결해서 값을 저장할 수 있도록 준비하는 것입니다.

var score; //변수 선언

변수를 선언했지만 아직 변수에 값을 할당하지 않았습니다.
이 때! 메모리 공간은 비어 있을 것으로 생각할 수 있으나 이미 자바스크립트 엔진에 의해 undefined라는 값이 암묵적으로 할당되어 초기화됩니다.

🍧초기화란? 변수가 선언된 이후 최초의 값을 할당하는 것을 말합니다.

Q. 만일에 초기화 되지 않으면요?
A. 전에 다른 애플리케이션이 사용했던 값(garbage value)이 남아있을 수 있습니다.
그러나 var 키워드는 암묵적으로 초기화(=undefined)를 거치므로 괜찮습니다.

Q. 선언하지 않은 식별자에 접근하면 어떻게 되나요?
A. ReferenceError(참조 에러)가 뜹니다.

(상당히 익숙하다...)

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

console.log(score);

var score // 변수 선언문

이 코드들을 실행하면 어떻게 될까요?
console.log(score);가 실행되는 시점에는 아직 변수 선언이 실행되지 않았으므로 참조 에러가 발생할 것처럼 보입니다.
하지만?? 에러는 없고 undefined가 출력됩니다.

❗변수 선언은 한 줄씩 순차적으로 실행되지 않고 그 이전 단계에서 먼저 실행됩니다. (런타임x)

자바스크립트 엔진은 소스 코드를 실행하기 전 준비 단계인 소스 코드의 평가 과정에서
위치에 상관없이 모든 선언문을 먼저 실행합니다.

이와 같이 변수 선언문이 먼저 동작하는 것을 🍧변수 호이스팅이라고 합니다.

console.log(score); //undefined

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

console.log(score); // ??

그렇다면 아래의 console.log(score);에는 어떤 값이 찍혀나올까요?
답은 80입니다.
변수 호이스팅을 거쳐 score라는 변수가 먼저 선언되었고 그 다음에 80이라는 값이 할당되었습니다.

4.5 값의 할당

Q. 버려진 값들은 어떻게 되나요
A. 가비지 콜렉터에 의해 메모리에서 자동으로 해제됩니다. (언제인지는 알 수 없음)

4.7 식별자 네이밍 규칙

// 카멜 케이스(camelCase) - 변수, 함수
var firstName;

// 파스칼 케이스(PascalCase) 생성자 함수, 클래스
var FirstName;
profile
공부중

0개의 댓글