=> 메모리는 데이터를 저장할 수 있는 메모리 셀의 집합체다. 메모리 셀 하나의 크기는 1바이트이다.
let a = 20;
let b = 30;
let c = a+b;
이를 통해 알 수 있엇던 점 => 식별자는 값이 아니라 그 값의 메모리 주소를 기억하고 있다.
let afk;
=> 정답은 차지한다 이다.
변수에 값이 할당되지 않아도 자바스크립트는 afk라는 변수의 메모리 공간을 확보한다. 그 메모리에는 값이 정의 되지 않았다 라는 뜻의 undefined 가 할당된다.
console.log(afk);
var afk;
위 코드의 결과는 어떻게 나오게 될까?
호이스팅을 알기 전까진 나도 "당연히 변수선언식이 변수 참조 시점보다 늦게 나왔으니 Reference error가 뜰 것이다." 라고 생각했다.
정답은 => undefined 로 출력된다는 것이다.
이유는 바로 변수의 호이스팅이 이루어졌기 때문이다. C언어 같은 컴파일 언어는 저런 식으로 코드를 적으면 바로 에러가 날 것이다. 그러나 자바스크립트는 한 줄 한 줄 읽어들여 실행하는 인터프리터 언어이며 그 와 동시에 가장 중요한 점은
=> 변수 선언이 소스코드가 한 줄 한 줄 실행되는 시점인 런타임 시점이 아니라 그 이전단계에서 실행되기 떄문이다.
이를 소스 평가 과정이라고 하는데 이 과정이 끝나면 변수 선언을 포함한 모든 선언문을 제외하고 소스코드를 한 줄씩 순차적으로 실행하게 된다.
var afk = 10;
위의 코드 변수 afk의 값의 할당은 언제 이루어질까?
=> 런타임 이전, 소스 평가 과정을 거치고 나서야 할당이 이루어진다.
undefined -> 10 이라는 정수 값 할당
순으로 이루어진다.
var afk = 10;
afk = 20;
처음 코드를 실행시키면 afk라는 변수의 메모리 공간을 확보하고 런타임 때 먼저 정수 10이 그 메모리 공간에 할당될 것이다. 그 다음 afk = 20; 이라는 재할당 식을 읽어들인 후 새로운 메모리 공간을 확보하여 20이라는 값을 할당한다.
=> 이 떄 자바스크립트 엔진은 가비지 콜렉터 라는 기능을 통해 사용하지 않는 메모리를 해제한다.
let awayKeyboard;
let away_Keyboard;
let AwayKeyboard;
=> 나도 상황에 맞는 네이밍 컨벤션으로 사용해서 가독성 높은 코드를 작성해야 겠다.
var a = 10;
var afk;
위와 같은 변수 afk는 값으로 평가될 수 없으므로 표현식이 아니다. 선언문이다.
var afk;
afk=200;
afk=200; 자체가 표현식이다. 즉, 할당문은 표현식인 문이기 때문에 값처럼 사용할 수 있다.
var afk = x = 200;
console.log(afk); // 200
위의 경우는 할당문을 변수에 할당한 예제이다. 이 때 x=200 이라는 할당문은 할당한 값 200처럼 평가되기 때문에 afk에는 200이 할당된다.