90+%, easy recursive solution
Intuition\nSince loop will break the application, it is wise to use recursion.\n\n# Approach\nEach recursive call of setTimeout callback will call fn(...args), 
# Intuition\nSince loop will break the application, it is wise to use recursion.\n\n# Approach\nEach recursive call of setTimeout callback will call fn(...args), stop if stop function was called, and then call itself again.\n\n# Code\n```\nvar cancellable = function(fn, args, t) {\n    let stop = false;\n    fn(...args);\n\n    const startTimer = () => {\n        setTimeout(() => {\n            if (stop) return;\n            fn(...args);\n            startTimer();\n        }, t)\n    }\n\n   startTimer();\n\n    const stopF = () => {\n        stop = true;\n    }\n\n    return stopF;\n};\n```
['Recursion', 'JavaScript']