728x90
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 은 0으로 강제변환된다.
ES6 티폴트 인자 입장에서 인자 값이 없거나 undefined 값을 받거나 그저 그렇다.
하지만 차이점을 볼 수는 있다.
function foo(a = 42, b = a + 1){
console.log(
arguments.length, a, b,
arguments[0], arguments[1]
);
}
foo(); // 0 42 43 undefined undefined
foo( 10 ); // 1 10 11 10 undefined
foo( 5, undefined ); // 2 10 11 10 undefined
foo( 10, null ); // 2 10 null 10 null
아무런 인자도 넘기지 않았을 때 디폴트 인자 값이 a, b에 각각 적용되었지만
arguments 배열에는 원소가 하나도 없다.
728x90
'JavaScript > You Don't know JS' 카테고리의 다른 글
JS 복습 1주차 / 2. 값 (0) | 2022.11.05 |
---|---|
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 |