728x90
자바스크립트에는 하위 에러 타입(TypeError, ReferenceError, SyntaxError 등)뿐만 아니라,
일부 에러는 컴파일 시점에 발생하도록 문법적으로 정의되어 있다.
자바스크립트에서는 컴파일 도중에 조기 에러로 붙잡아 던지게 되어있는,
여러가지 조건이 있다.
구문 에러( a = , 등과 같은) 는 물론, 자바스크립트 문법에는 구문상 오류는 아니지만 허용되는 것들도 정의되있다.
코드가 실행되기도 전에 발생하므로 이런 에러는 try ... catch로 잡을 수 없으며,
그저 프로그램 파싱/컴파일이 실패한다.
자바스크립트 구문상 아무 문제가 없지만 올바르지 않은 정규 표현식은 조기 에러를 던진다.
var a = /+foo/; // 에러
할당 대상은 반드시 식별자여야 하므로 다음 예제에서 42는 잘못된 위치에 있기에 곧바로 에러가 난다.
var a;
42 = a; // 에러
너무 이른 변수 사용
ES6는 임시 데드 존TDZ 이라는 새로운 개념을 도입했다.
TDZ는 아직 초기화 하지 않아 변수를 참조할 수 없는 코드 영역이다.
대표적으로 let 블록 스코핑이 있다.
{
a = 2; // ReferenceError
let a;
}
let a 선언에 의해 초기화 되기 전 a = 2 할당문이 {}스코프 안에 있는 변수 a 에 접근하려고 한다.
하지만, a는 아직 TDZ 내부에 있으므로 에러가 난다.
참고로 typeof 연산자는 선언되지 않은 변수 앞에 붙여도 오류는 나지 않는데 TDZ 참조시에는 안전장치가 없다.
{
typeof a; // undefined
typeof b; // ReferenceError! (TDZ)
let b;
}
728x90
'JavaScript > You Don't know JS' 카테고리의 다른 글
JS 복습 1주차 / 1. 타입 (0) | 2022.11.05 |
---|---|
I don't know JS YET) 문법 - 함수 인자 (0) | 2022.07.10 |
I don't know JS YET) 문법 - 세미콜론 자동 삽입 (0) | 2022.07.09 |
I don't know JS YET) 문법 - 연산자 우선순위 (0) | 2022.07.06 |
I don't know JS YET) 문법 - 문과 표현식 (0) | 2022.07.05 |