TDZ

var, let, const 모두 변수를 선언하는 키워드이다. let과 const는 ES2015(ES6)에서 등장했으며 여러가지 다른 특성을 갖는다. var let const 유효 범위(스코프 범위) Function Scope Block Scope Block Scope 재할당 가능 가능 불가능 재선언 가능 불가능 불가능 1. 스코프 규칙 스코프에 관한 글 var는 함수 스코프를 갖는다. 하지만, let과 const는 블록 스코프를 갖는다. 1-1 var var 키워드는 함수 스코프(Function Scope)이다. 이는 생성된 함수 스코프 내에서만 사용할 수 있으며, 외부에 선언된 경우는 전역 범위를 갖는다. var age = 24; function foo () { var name = "JuHyeon" ..
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..
58청춘
'TDZ' 태그의 글 목록