Easy approach towards problem
Intuition\n Describe your first thoughts on how to solve this problem. \nThis requires clearTimeout funtion which cancels a timeout previously established by ca
# Intuition\n<!-- Describe your first thoughts on how to solve this problem. -->\nThis requires clearTimeout funtion which cancels a timeout previously established by calling setTimeout().\n\n# Approach\n<!-- Describe your approach to solving the problem. -->\nFirst to make a timer for function execution for time t and cancelFn function for cancelling that timeout event. \nconst cancel = cancellable(log, args, t);\nand cancel would get cancelfn function returned from cancellable. \n         \n  setTimeout(() => {     cancel()\n  }, cancelT)\n\n\n\n\n# Code\n```\n/**\n * @param {Function} fn\n * @param {Array} args\n * @param {number} t\n * @return {Function}\n */\n\nvar cancellable = function(fn, args, t) {\n  const timer = setTimeout(()=> {\n    fn(...args);\n  }, t);\n\n  const cancelFn = function(){\n    clearTimeout(timer);\n  }\n  return cancelFn;\n};\n\n\n/**\n *  const result = []\n *\n *  const fn = (x) => x * 5\n *  const args = [2], t = 20, cancelT = 50\n *\n *  const start = performance.now() \n *\n *  const log = (...argsArr) => {\n *      const diff = Math.floor(performance.now() - start);\n *      result.push({"time": diff, "returned": fn(...argsArr))\n *  }\n *       \n *  const cancel = cancellable(log, args, t);\n *\n *  const maxT = Math.max(t, cancelT)\n *           \n *  setTimeout(() => {\n *     cancel()\n *  }, cancelT)\n *\n *  setTimeout(() => {\n *     console.log(result) // [{"time":20,"returned":10}]\n *  }, maxT + 15)\n */\n```
['JavaScript']