이벤트 핸들러: 이벤트가 발생했을 때 호출될 함수
이벤트 핸들러 등록: 이벤트가 발생했을 때 브라우저에게 이벤트 핸들러의 호출을 위임
이벤트 드리븐 프로그래밍: 프로그램의 흐름을 이벤트 중심으로 제어하는 프로그래밍 방식
focusin, focusout 이벤트 핸들러는 addEventListener 메서드 방식을 사용해 등록해야 한다
어트리뷰트 값으로 함수 호출문 등의 문을 할당하면 이벤트 핸들러가 등록된다
addEventListener메서드를 통해 참조가 동일한 이벤트 핸들러를 중복 등록하면 하나의 이벤트 핸들러만 등록 된다
EventTarget.prototype.removeEventListener 메서드를 사용한다
addEventListener메서드에 전달한 인수와 removeEventListener 메서드에 전달한 인수가 일치해야 한다
이벤트 핸들러 프로퍼티 방식으로 등록한 이벤트 핸들러를 제거하려면 null을 할당
드래그는 mousedown이벤트가 발생한 상태에서 mousemove 이벤트가 발생한 시점에 시작하고 mouseup 이벤트가 발생한 시점에 종료
한글을 입력하고 엔터키를 누르면 keyup이벤트 핸들러가 두 번 호출 되므로 대신 kedown이벤트를 캐치한다
생성된 이벤트 객체는 이벤트를 발생시킨 DOM 요소인 이벤트 타깃을 중심으로 DOM 트리를 통해 전파
하나의 상위 DOM요소에 이벤트 핸들러를 등록
preventDefault 메서드는 DOM요소의 기본 동작을 중단
stopPropagation 메서드는 이벤트 전파를 중지
이벤트 핸들러 내부의 this는 이벤트를 바인딩한 DOM요소를 가리킨다
즉, this는 이벤트 객체의 currentTarget 프로퍼티와 같다
이벤트 핸들러 내부에서 함수를 호출하면서 인수를 전달
이벤트 핸들러를 반환하는 함수를 호출하면서 인수를 전달
이벤트 생성자 함수는 첫번째로 이벤트 타입을 나타내는 문자열을 전달 받음
CustomEvent 이벤트 생성자 함수를 사용
// KeyboardEvent 생성자 함수로 keyup 이벤트 타입의 커스텀 이벤트 객체를 생성
const keyboardEvent = new KeyboardEvent('keyup');
console.log(keyboardEvent.type); // keyup
// CustomEvent 생성자 함수로 foo 이벤트 타입의 커스텀 이벤트 객체를 생성
const customEvent = new CustomEvent('foo');
console.log(customEvent.type); // foo
커스텀 이벤트 객체는 버블링되지 않으며 preventDefault 메서드로 취소할 수 없다
dispatchEvent메서드는 이벤트 핸들러를 동기 처리 방식으로 호출
함수를 일정 시간이 경과된 ㅣ후에 호출되도록 함수 호출을 예약
const timeoutId = setTimeput(func|code[,delay,param1,param2,...]);
짧은 시간 간격으로 발생하는 이벤트를 그룹화해서 마지막에 한 번만 이벤트 핸들러가 호출되도록 한다
짧은 시간 간격으로 발생하는 이벤트가 연속해서 발생하더라도 일정 시간 간격으로 이벤트 핸들러가 최대 한번만 호출
짧은 시간 간격으로 발생하는 이벤트를 그룹화해서 일정 시간 단위로 이벤트 핸들러가 호출되도록 호출 주기를 만든다