
변수 호이스팅 : 변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트의 고유의 특징
console.log(score) ;
var score ;
위 코드를 볼때자바스크립트 코드는 인터프리터에 의해 순차적으로 실행되니 console.log(score);가 가장먼저 실행되고 그 뒤로 선언문인 var score;가 실행될 것 이라고 생각할 것이다. 하지만 변수 선언은 런타임(소스코드가 한 줄씩 순차적으로 실행되는 시점)이 아니라 그 이전 단계에서 먼저 실행된다.
변수 호이스팅시 값에 할당되는 값은 undefined으로 초기화가 된다.
변수 선언 뿐만 아니라 var, let, const, function, class 키워드를 사용해서 선언하는 모든 식별자(변수,함수,class 등)는 호이스팅이 된다.
변수의 값을 할당 할 때는 할당 연산자 =을 사용한다.
할당 연산자는 우변의 값을 좌변의 변수에 할당한다.
var score; // 변수 선언
score = 80; // 값의 할당
( 1. 변수 선언과 값의 할당을 두 개의 문으로 나누어 표현한 식 )
var score = 80;
( 2. 변수 선언과 값의 할당을 한 개의 문으로 단축 표현한 식 )
두 식을 무엇을 사용하든 상관없지만 2번처럼 단축 표현한 식을 사용해도 변수의 선언과 값의 할당을 2개의 문으로 나누어 각각 실행한다.
즉 변수에 undefined가 할당되어 초기화되는 것은 변함이 없다.

유의할 점은 변수에 값을 할당할 때 이전의 undefined가 저장되어 있던 메모리 공간을 지우고 그 메모리 공간에 할당 값 80을 새롭게 저장하는게 아니라
새로운 메모리 공간을 확보하고 그곳에 할당 값 80을 저장한다는 것에 유의
console.log(score); // undefined
var score = 80;
console.log(score); // 80
위 코드에서 "console.log(score)" 부분이 의문점이 들수도 있다.
"4.1 변수호이스팅"에 의거하여 80이 나오는게 맞지 않느냐는 것이다.
하지만 변수 호이스팅과 할당은 실행 순서가 같지않다.
변수의 호이스팅은 런타임 이전단계에서 이루어지고,
변수의 할당은 런타임단계에서 이루어진다.
그러므로 맨 윗줄의 출력코드 부분은 변수 호이스팅에 의하여 초기화된 undefined 값이 나오는것이다.
두번째 소스코드인 "var score = 80;"을 비로소 만나서야 값이 할당되어
세번째 출력코드 부분에서 80의 값이 출력이 되는것.
값의 재할당 : 이미 값이 할당되어 있는 변수에 새로운 값을 또다시 할당
재할당은 변수에 저장된 값을 다른값으로 변경함 그래서 변수라고 하는 것
식별자 : 어떤 값을 구별해서 식별해낼 수 있는 고유한 이름
규칙
네이밍 컨벤션 : 하나 이상의 영어 단어로 구성된 식별자를 만들 때
가독성 좋게 단어를 한눈에 구분하기 위한 명명 규칙
변수나 함수의 이름에는 카멜 케이스인 1번
생성자 함수, 클래스의 이름에는 파스칼 케이스는 2번을 많이 사용함.