var cancellable = function(fn, args, t) {
fn(...args)
const ID = setInterval(fn, t, ...args)
return function cancelFn() {
clearInterval(ID);
}
};
일단 문제의 요구사항을 살펴보면 아래와 같다.
- 함수
fn, 전달인자 배열args, 인터벌시간t가 주어질때, 취소함수cancelfn를 리턴하라- 함수
fn은 즉시 실행되야한다. 그리고 매t밀리초마다 실행되어야한다.간추려보면 함수
fn을t밀리초마다 실행하라는 것이다. 따라서 setInterval() 메소드를 사용해서 해결하기로했다.
setInterval() 메소드는
1. delay마다 실행될 함수
2. delay 시간
3. delay마다 실행될 함수에 전달될 인자
이렇게 3종류의 파라미터를 가진다. 따라서fn,t,args를 순서대로 전달인자로 전달하면된다.
이 때 반환되는 값은 타이머를 식별하는 고유한 숫자 값이다. 이 값을 이용해서 인터벌을 취소할 수 있다.
clearInterval() 메소드에 이 값을 전달해서 취소할 수 있다. 따라서, 리턴되는cancelfn안에 취소 코드를 작성하면 된다.
여기서 주의할 점은 setInterval() 메소드는 호출 후 delay 시간이 한 번 지난 후 처음으로 콜백함수가 실행된다. 그래서 메소드를 호출하기전에 한 번 직접 호출해줘야한다.