변수

1. 변수 선언

변수 선언이란 변수를 생성하는 것을 말한다.

값을 저장하기 위한 메모리공간을 확보allocate하고, 변수 이름과 확보된 메모리 공간의 주소를 연결name binding해서 값을 저장할 수 있게 준비하는 것이다.

let score; // 변수 선언

Javascript 엔진은 변수 선언을 다음 2단계에 거쳐 수행한다.

  1. 선언: 변수 이름을 실행컨텍스트에 저장하여 자바스크립트 엔진에 변수의 존재를 알린다.
  2. 초기화: 값을 저장하기 위한 메모리 공간을 확보하고 암묵적으로 undefined를 할당해 초기화한다.

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

console.log(score); // undefined
var score; // 변수 선언

변수 선언보다 변수를 참조reference하는 코드가 앞에 있다.

따라서 ReferenceError가 발생할 것으로 보인다. 하지만 ReferenceError가 발생하지 않고 undefined가 출력된다.

그 이유는 변수 선언이 코드가 실행되는 시점runtime이 아니라 그 이전 단계에서 먼저 실행되기 때문이다.

Javascript 엔진은 런타임 이전에 소스코드 평가 과정에서 모든 선언문(변수선언, 함수선언 등)을 먼저 실행한다.

이처럼 변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 특징을 변수 호이스팅variable hoisting이라 한다.

3. 값의 할당assignment

변수 선언은 런타임 이전에 실행되지만,

값의 할당은 런타임때 실행된다.

console.log(score); // undefined
var score = 10; // 변수 선언 & 값의 할당
console.log(score); // 10

변수에 값을 할당할 때는

변수 선언때 undefined가 저장되어 있던 메모리 공간에 할당하는 것❌이 아니라

새로운 메모리 공간을 확보⭕️하고 그곳에 할당 값 10을 저장한다.

4. 값의 재할당

var score = 80;
score = 90;

재할당이란 이미 값이 할당되어 있는 변수에 새로운 값을 또다시 할당하는 것을 말한다.

만약 값을 재할당 할수 없다면 변수가 아니라 상수constant 라 한다.

재할당도 새로운 메모리 공간을 확보하고 그곳에 새로운 값을 저장한다.

재할당 시 이전에 변수와 연결name binding되어 있던 메모리 공간은 어떻게 되는가?

아무런 변수와 연결되지 않은 메모리공간은 더 이상 필요하지 않다.

이런 불필요한 값들은 가비지 콜렉터에 의해 메모리에서 자동 해제release되어 메모리 누수memory leak을 방지한다.

5. 식별자id 네이밍 규칙

식별자identifier 는 어떤 값을 구별하여 식별하는 고유한 이름을 말한다.

식별자는 다음 규칙을 준수해야 한다.

  • 식별자는 특수문자를 제외한 문자, 숫자, 언더스코어_, 달러기호$를 포함할 수 있다.
  • 단, 식별자는 특수문자를 제외한 문자, _, $ 로 시작해야 한다. 숫자로 시작하는 것은 허용하지 않는다.
  • 예약어는 식별자로 사용할 수 없다. (let, if, class, this 등)

6. 식별자 네이밍 컨벤션

하나 이상의 영어 단어로 구성된 식별자를 만들 때 가독성 좋게 단어를 구분하기 위해 규정한 명명 규칙이다.

  • camelCase: firseName
  • PascalCase: FirstName

자바스크립트는 주로 카멜케이스와 파스칼케이스를 이용한다.