diff --git "a/[40\354\236\245] \354\235\264\353\262\244\355\212\270-1/\355\230\234\354\210\230.md" "b/[40\354\236\245] \354\235\264\353\262\244\355\212\270-1/\355\230\234\354\210\230.md"
new file mode 100644
index 0000000..80e29ea
--- /dev/null
+++ "b/[40\354\236\245] \354\235\264\353\262\244\355\212\270-1/\355\230\234\354\210\230.md"
@@ -0,0 +1,116 @@
+# 40장 이벤트-1
+## 40.1 이벤트 드리븐 프로그래밍
+브라우저는 처리해야 할 특정 사건이 발생하면 이를 감지해 이벤트를 발생시킴
+만약 애플리케이션이 특정 타입의 이벤트에 대해 반응해 어떤 일을 하고 싶다면 해당하는 타입의 이벤트가 발생했을 때 호출될 함수를 브라우저에게 알려 호출을 위임함
+ex) 사용자가 버튼 클릭을 할 때 클릭 이벤트가 발생하면 특정 함수를 호출(이벤트 핸들러)하도록 브라우저에게 위임(이벤트 핸들러 등록)
+
+이벤트 핸들러 : 이벤트가 발생했을 때 호출될 함수
+이벤트 핸들러 등록 : 이벤트가 발생했을 때 브라우저에게 이벤트 핸들러의 호출을 위임
+
+## 40.2 이벤트 타입
+이벤트 타입은 이벤트의 종류를 나타내는 문자열
+[상세목록](https://developer.mozilla.org/en-US/docs/Web/Events)
+
+## 40.3 이벤트 핸들러 등록
+이벤트 핸들러를 등록하는 방법은 3가지이다.
+### 40.3.1 이벤트 핸들러 어트리뷰트 방식
+이벤트 핸들러 어트리뷰트의 이름은 onClick과 같이 on 접두사와 이벤트의 종류를 나타내는 이벤트 타입으로 이루어짐
+이벤트 핸들러 어트리뷰트 값으로 함수 호출문 등의 문을 할당하면 이벤트 핸들러가 등록 됨
+```html
+
+```
+```js
+function sayHi(text){
+ ...
+}
+```
+주의할 점 : 이벤트 핸들러 어트리뷰트 값으로 함수 참조가 아닌 함수 호출문 등의 문을 할당함!
+
+이벤트 핸들러를 등록할 때 콜백 함수와 마찬가지로 함수 참조를 등록해야 브라우저가 이벤트 핸들러를 호출할 수 있음. 만약 함수 참조가 아닌 함수 호출문을 등록하면 함수 호출문의 평과 결과가 이벤트 핸들러로 등록됨
+하지만 위 예제에는 이벤트 핸들러 어트리뷰트 값으로 함수 호출문을 할당했는데, 사실 이벤트 핸들러 어트리뷰트 값은 사실 암묵적으로 생설될 이벤트 핸들러의 함수 몸체를 의미함
+```js
+function onclick(event){
+ sayHi('Hi');
+}
+```
+`onclick="sayHi('Hi')"` 어트리뷰트는 파싱되어 위와 같은 함수를 암묵적으로 생성하고, 이벤트 핸들러 어트리뷰트 이름과 동일한 onclick 이벤트 핸들러 프로퍼티에 할당함
+
+이처럼 동작하는 이유는 이벤트 핸들러에 인수를 전달하기 위해서이며 만약 이벤트 핸들러 어트리뷰트 값으로 함수 참조를 할당해야 한다면 이벤트 핸들러에 인수를 전달하기 곤란해짐
+
+이 방식은 CBD(Component Based Development) 방식의 Angular,React,Svelte,Vue.js에서 이벤트를 처리하기 때문에 알아두는 것이 좋을 것 같음
+### 40.3.2 이벤트 핸들러 프로퍼티 방식
+window 객체와 Document, HTMLElement 타입의 DOM 노드 객체는 이벤트에 대응하는 이벤트 핸들러 프로퍼티를 가짐
+```html
+
+```
+```js
+const $button = document.querySelector('button');
+
+$button.onclick = function(){
+...
+};
+```
+이벤트 핸들러를 등록하기 위해 이벤트를 발생시킬 객체인 이벤트 타깃과 이벤트의 종류를 나타내는 문자열인 이벤트 타입 그리고 이벤트 핸들러를 지정할 필요가 있음
+ex) 버튼 요소가 클릭되면 handleClick 함수를 호출하도록 이벤트 핸들러를 등록하는 경우 이벤트 타깃은 버튼 요소이고 이벤트 타입은 'click' 이며 이벤트 핸들러는 handleClick 함수임
+
+이벤트 핸들러는 대부분 이벤트를 발생시킬 이벤트 타깃에 바인딩 하지만 이벤트 전파, 이벤트 위임을 통해 이벤트 타깃 또는 전파된 이벤트를 캐치할 DOM 노드 객체에 바인딩할 수도 있음
+
+이벤트 핸들러 프로퍼티 방식은 앞에서 살펴본 이벤트 핸들러 어트리뷰트 방식과 동일하다. 하지만 프로퍼티 방식은 하나의 이벤트 핸들러만 바인딩 할수 있다는 단점이 있음
+### 40.3.3 addEventListener 메서드 방식
+```js
+EventTarget.addEventListener('eventType',functionName,[,useCpature]); // 마지막 매개변수는 false가 기본값이고 true일때 capture 사용.
+```
+addEventListener 메서드의 첫 번째 매개변수에는 이벤트의 종류를 나타내는 문자열인 이벤트 타입을 전달 -> on 접두사를 붙이지 않음
+두 번째 매개변수에는 이벤트 핸들러를 전달
+마지막 매개변수에는 이벤트를 캐치할 이벤트 전파 단계를 지정 -> capture or bubbling
+
+만약 동일한 HTML요소에서 발생한 동일한 이벤트에 대해 이벤트 핸들러 프로퍼티 방식과 addEventListener 메서드 방식을 모두 사용해 이벤트 핸들러를 등록하면 두 방식은 서로에게 영향을 주지 않기 때문에 2개의 이벤트 핸들러가 모두 호출되게 됨
+-> 이벤트 핸들러 프로퍼티 방식은 하나의 이벤트만 바인딩 할수 있었지만 addEventListener 메서드는 하나 이상의 이벤트 핸들러를 등록할 수 있다는 장점이 있음(이벤트 핸들러는 등록된 순서대로 호출)
+## 40.4 이벤트 핸들러 제거
+- addEventListener 메서드로 등록한 이벤트 핸들러를 제거하려면 EventTarget.prototype.removeEventListener 메서드를 사용
+이때 removeEventListener에 전달할 인수는 addEventListener와 동일
+-> 무명 함수를 이벤트 핸들러로 등록한 경우 제거할 수 없게됨
+
+만약에 기명 함수를 이벤트 핸들러로 등록할 수 없는경우 호출된 함수(자기 자신)를 가리키는 `arguments.callee`를 사용할 수 있음
+하지만 코드 최적화를 방해하므로 strict mode에서 사용이 금지됨
+- 이벤트 핸들러 프로퍼티 방식으로 등록한 이벤트 핸들러는 이벤트 핸들러 프로퍼티에 null을 할당
+## 40.5 이벤트 객체
+이벤트가 발생하면 이벤트에 관련한 다양한 정보를 담고 있는 이벤트 객체가 동적으로 생성되며 생성된 이벤트 객체는 이벤트 핸들러의 첫 번째 인수로 전달됨
+이벤트 객체를 전달받으려면 이벤트 핸들러를 정의할 때 이벤트 객체를 전달받을 매개변수를 명시적으로 선언해야함
+- 이벤트 핸들러 어트리뷰트 방식으로 이벤트 핸들러를 등록한 경우
+이벤트 핸들러의 첫 번째 매개변수 이름이 반드시 event여야 함. 만약 다른 이름으로 선언하게 되면 이벤트 객체를 전달받지 못함
+```html
+
+
+
클릭한 화면의 좌표값
+ + + + +``` +### 40.5.1 이벤트 객체의 상속 구조 +이벤트가 발생하면 암묵적으로 생성되는 이벤트 객체도 생성자 함수에 의해 생성되며, 생성된 이벤트 객체는 생성자 함수와 더불어 생성되는 프로토타입으로 구성된 프로토타입 체인의 일원이 됨. + +이벤트 객체 중 일부는 사용자의 행위에 의해 생성된 것이고 일부는 자바스크립트 코드에 의해 인위적으로 생성된 것. +### 40.5.2 이벤트 객체의 공통 프로퍼티 +Event 인터페이스, Event.prototype에 정의되어 있는 이벤트 관련 프로퍼티는 UIEvent, CustomEvent, MouseEvent 등 모든 파생 이벤트 객체에 상속되며, Event 인터페이스의 이벤트 관련 프로퍼티는 모든 이벤트 객체가 상속받는 공통 프로퍼티임