현재 코드에는 td 태그마다 클릭 이벤트 리스너가 달려 있습니다. 나중에 이벤트 리스너를 제거할 상황이 생기면 이벤트 리스너 9개를 일일이 제거해야 합니다. 이벤트 리스너를 한 번에 달고 제거할 수 있으면 좋겠죠? 코드를 다음과 같이 수정합니다. td 태그에서 이벤트를 제거하고 table 태그에 이벤트를 연결합니다.

    for (let i = 1; i <= 3; i++) {
      const $tr = document.createElement('tr'); 
      const cells = [];
      for (let j = 1; j <= 3; j++) {
        const $td = document.createElement('td'); 
        cells.push($td);
        $tr.appendChild($td);
      }
      rows.push(cells);
      $table.appendChild($tr);
      $table.addEventListener('click', callback);
    }

    기존과 결과가 같습니다. td를 클릭할 때 table에도 click 이벤트가 발생합니다. 자식 태그에 이벤트가 발생할 때 부모 태그에도 동일한 이벤트가 발생하는 현상인 이벤트 버블링 때문입니다. 기억나지 않는다면 4.3.4 이벤트 버블링과 캡처링을 참고해 주세요.

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.