#this
this 키워드는 함수 내부에서 동적으로 결정되는 특수한 식별자입니다.
this는 '일반 함수'와 '화살표 함수'에 따라 다르게 정의되므로, 주의해서 사용해야 합니다.
function 키워드를 사용하는 '일반 함수' 에서는
<자신을 호출하는 위치>에서 this가 정의됩니다.
즉, 호출할 때의 상황에 따라 this가 달라지기 때문에 동적입니다.
반면, '화살표 함수' 에서는
<자신이 선언된 렉시컬 범위(부모 함수)>에서 this가 정의됩니다.
즉, 선언된 위치로 고정되기 때문에 정적입니다.
JS코드를 보면
setTimeout()화살표 함수는
timeout()함수로 감싸져 있고(부모함수)
timeout()함수가 가지고 있는 this키워드는
최상위의 timer라는 객체데이터에 포함되어있기 때문에
결과적으로
timeout()함수의 this와
setTimeout()함수의 this는 같은 것이 됩니다.
따라서, 콘솔로그 결과를 보면
"TIMER!" 라는 로그가 뜨고
1초 뒤에 "TIMER!" 로그가 한번 더 뜨는 것을 볼 수 있습니다.