독서일지 - Deep dive

동화·2022년 10월 18일
0

독서일지

목록 보기
1/3
post-thumbnail

독서일지 1주차 (10월 11일 - 10월 17일)

📌 1일차 [ 04장 변수 ]

선언하지 않은 식별자에 접근하면 ReferenceError(참조 에러)가 발생한다.
자바스크립트 코드는 한 줄씩 순차적으로 실행(런타임)되므로 console.log(score)가 먼저 실행되어 참조에러가 발생할 것 같지만 undefined가 출력된다.

  • 변수 선언이 런타임이 아니라 그 이전단계에서 먼저 실행되기 때문
  • 자바스크립트 엔진은 한 줄씩 실행하기에 앞서 소스코드의 평가과정을 거친다. 이때 모든 선언문을 소스코드에서 찾아내 먼저 실행한다.
  • 그리고 평가 과정이 끝나면 모든 선언문을 제외하고 소스코드를 한 줄씩 순차적으로 실행한다.

위의 사진은 그 증거가 된다.
이처럼 변수 선언문이 코드의 선두로 끌어올려진 것처럼 동작하는 자바스크립트 고유의 특징을 변수 호이스팅이라고 한다.

변수 선언뿐 아니라 ver, let, const, function, class 등 모두 호이스팅 된다.





📌 2일차 [ 05장 표현식과 문 ]



🌹 리터럴

리터럴(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변수에 다시 할당된 것이다.

  • 개발자 도구에서 표현식이 아닌 문을 실행하면 언제나 undefined를 출력하는데, 이를 완료 값이라고 한다.
  • 완료값은 표현식의 평가 결과가 아니며 따라서 다른 값과 같이 변수에 할당할 수 없고 참조도 할수 없다.
  • 개발자 도구에서 표현식인 문을 실행하면 언제나 평가된 값을 반환한다.

0개의 댓글