반응형

함수에 인수를 전달하려면 ? ⇒ 함수를 호출할 때 전달해야 한다.

이벤트 핸들러 어트리뷰트 방식은 함수 호출문 방식을 사용할 수 있기 때문에 인수를 전달할 수 있지만 이벤트 핸들러 프로퍼티 방식과 addEvenetListener 메서드 방식의 경우 이벤트 핸들러 브라우저가 호출하기 때문에 함수 호출문이 아닌 함수 자체를 등록해야한다. 따라서 인수를 전달할 수 없다.

 

<!DOCTYPE html>
<html>

<body>
    <label>User Name</label>
    <em class="message"></em>
    <script>
        const MIN_USER_NAME_LENGTH = 5; //이름 최소 길이
        const $input = document.querySelector('input[type=text]');
        const $msg = document.querySelector('.message');

        const checkUserNameLenght = min => {
            $msg.textContent
                = $input.value.length < Min ? `이름은 ${min}자 이상 입력해 주세요 ` : '';
        }
        //이벤트 핸들러 내부에서 함수를 호출하면서 인수를 전달한다. 

        $input.onblur = () => {
            checkUserNameLenght(MIN_USER_NAME_LENGTH);
        };
    </script>
</body>

</html>

또는 이벤트 핸들러를 반환하는 함수를 호출하면서 인수를 전달할 수도 잇ㅆ다.

<!DOCTYPE html>
<html>

<body>
    <label>User Name</label>
    <em class="message"></em>
    <script>
        const MIN_USER_NAME_LENGTH = 5; //이름 최소 길이
        const $input = document.querySelector('input[type=text]');
        const $msg = document.querySelector('.message');

        //이벤트 핸들러를 반환하는 함수
        const checkUserNameLenght = min => e => {
            $msg.textContent
                = $input.value.length < Min ? `이름은 ${min}자 이상 입력해 주세요 ` : '';
        };
        //이벤트 핸들러 내부에서 함수를 호출하면서 인수를 전달한다. 

        $input.onblur = checkUserNameLenght(MIN_USER_NAME_LENGTH)

    </script>
</body>

</html>

checkUserNameLenght 함수는 함수를 반환한다. 따라서, $input.onblur 에는 결국 checkUserNameLenght 함수가 반환하는 함수가 바인딩한다.

'[JS] Modern JavaScript' 카테고리의 다른 글

[JS]-JavaScript -dataset 속성  (0) 2022.08.18

+ Recent posts