한번만 실행하는 함수 (once:true X)

들블리셔·2022년 5월 1일
0

회사에서 일을 하는데 함수가 한번만 호출이 되게끔 해야하는 기능을 구현했어야 했는데, 간단하게 이벤트리스너에서 세 번째 매개변수에 option객체를 이용해서 잘 해결될 줄 알았지만 그게 아니었다.


const btn = document.getElementById('btn');



방법1

function once(fn, context) {
  var result;
  return function () {
    if (fn) {
      result = fn.apply(context || this, arguments);
      fn = null;
    }
    return result;
  };
}

var canOnlyFireOnce = once( () => {
  //something
})

btn.addEventListener('click', () => {
  canOnlyFireOnce();
})

구글링을 해서 겨우 찾은 코드이다.. 코드가 잘 이해가 안가지만 사용하기에 너무 적합해서 사용했었다. 함수형 프로그래밍은 정말 어려운 것 같습니다.

방법2

btn.addEventListener('click', () => {
  //something
}, {once:true})

addEventListener( type, listener, options )
// 이벤트 유형 // 콜백함수 자리 // 이벤트 특징



세 번째 매개변수 중에서 once라는 메서드를 통해서 구현할 수 있습니다.
이 방법이 거의 대부분 아는 방법이지 않을까 싶습니다.



하지만 이렇다고 가정해보자..
이벤트리스너 안에 호출되는 함수가 몇 가지가 있는데,
한가지만 호출되게 하려면 once메서드로는 불가능하다.


ex)

btn.addEventListener('click', () => {
  myFunction1() // 이 함수만 한 번만 호출되길 원함.
  myFunction2()  

}, {once:true})

이렇게 되면 myFunction1,myFunction2 두개의 함수가 한번만 실행하게 됩니다. 그렇기 때문에 방법1과 같은 코드를 사용했습니다.

profile
나의 공부방

0개의 댓글