독서일지 1주차 (10월 11일 - 10월 17일)
선언하지 않은 식별자에 접근하면 ReferenceError(참조 에러)
가 발생한다.
자바스크립트 코드는 한 줄씩 순차적으로 실행(런타임)되므로 console.log(score)가 먼저 실행되어 참조에러가 발생할 것 같지만 undefined가 출력된다.
런타임
이 아니라 그 이전단계에서 먼저 실행되기 때문위의 사진은 그 증거가 된다.
이처럼 변수 선언문이 코드의 선두로 끌어올려진 것처럼 동작하는 자바스크립트 고유의 특징을 변수 호이스팅
이라고 한다.
변수 선언뿐 아니라 ver, let, const, function, class 등 모두 호이스팅 된다.
리터럴(literal)은 사람이 이해할 수 있는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기법을 말한다.
값으로 평가될 수 있는 문(statement)
표현식이 평가되면 새로운 값을 생성하거나 기존 값을 참조한다.
token : 문법으로 더 이상 나눌 수 없는 단위 (var, sum, =)
문 = 프로그램의 최소 단위(문은 여러 토큰으로 구성된다.)
문 ? 선언문 / 할당문 / 조건문 / 반복문
// 변수 선언문은 값으로 평가될 수 없으므로 표현식이 아니다.
var x;
// 1, 2, 1 + 2, x = 1 + 2는 모두 표현식이다.
// x = 1 + 2는 표현식이면서 완전한 문이기도 하다.
x = 1 + 2;
// 표현식이 아닌 문은 값처럼 사용할 수 없다.
var foo = var x; // SyntaxError: Unexpected token var
선언문이라서 값으로 평가될 수 없기 때문에, 즉 식이 아니기 때문에 에러가 난다.
// 변수 선언문은 표현식이 아닌 문이다.
var x;
// 할당문은 그 자체가 표현식이지만 완전한 문이기도 하다. 즉, 할당문은 표현식인 문이다.
x = 100;
x = 100
할당문은 자체가 표현식이다. 숫자 값 100
으로 평가된다.
// 표현식인 문은 값처럼 사용할 수 있다
var foo = x = 100;
console.log(foo); // 100
x = 100
이 값 100으로 평가되어 100값이 foo변수에 다시 할당
된 것이다.
완료 값
이라고 한다.평가된 값
을 반환한다.