문법

TDZ 관련 에러는 ES6 디폴트 인자 값에서도 찾아볼 수 있다. var b = 3; function foo(a = 42, b = a + b + 5){ ... } 좌변의 b는 아직 TDZ에 남아있는 b를 참조하려하기에 에러를 던지지만, 이 시점에서 인자 a는 TDZ를 밟고 간 이후여서 문제가 없다. ES6 디폴트 인자 값은 함수에 인자를 넘기지 않거나 undefined를 전달했을 때 적용된다. function foo(a = 42, b = a + 1){ console.log(a, b); } foo(); // 42 43 foo( undefined ); // 42 43 foo(5); // 5 6 foo(void 0, 7); // 42, 7 foo( null ); // null 1 a + 1 표현식에서 null..
자바스크립트에는 하위 에러 타입(TypeError, ReferenceError, SyntaxError 등)뿐만 아니라, 일부 에러는 컴파일 시점에 발생하도록 문법적으로 정의되어 있다. 자바스크립트에서는 컴파일 도중에 조기 에러로 붙잡아 던지게 되어있는, 여러가지 조건이 있다. 구문 에러( a = , 등과 같은) 는 물론, 자바스크립트 문법에는 구문상 오류는 아니지만 허용되는 것들도 정의되있다. 코드가 실행되기도 전에 발생하므로 이런 에러는 try ... catch로 잡을 수 없으며, 그저 프로그램 파싱/컴파일이 실패한다. 자바스크립트 구문상 아무 문제가 없지만 올바르지 않은 정규 표현식은 조기 에러를 던진다. var a = /+foo/; // 에러 할당 대상은 반드시 식별자여야 하므로 다음 예제에서 42..
문과 표현식 자바스크립트에서 문과 표현식은 중요한 차이가 있다. var a = 3 * 6; var b = a; b; 3 * 6은 표현식이다. 두번째 줄과 세번째 줄 또한 표현식이다. var a = 3 * 6, var b = a 두 문은 각각 변수를 선언 하므로 선언문 이라 한다. a = 3 * 6 이나 b = a는 할당 표현식 이라 한다. 세번째 줄은 표현식의 전부이지만 이것만으로 완벽한 문이다. 일반적으로 이 문은 표현식 문이라 한다. 1 - 문의 완료 값 모든 문은 완료 값을 갖는다. 심지어 undefined값을 갖을 수 있어도 갖는다. var문의 완료값은 undefined이다. 실제로 var a = 42를 콘솔창에 실행시켜 보면 42 대신 undefined가 나온다. 이는 콘솔이 실행한 문의 완료 ..
58청춘
'문법' 태그의 글 목록