Allow One Function Call
LeetCode題目: 2666. Allow One Function Call
My solution:
/**
* @param {Function} fn
* @return {Function}
*/
let once = fn => {
function* gen() {
yield fn;
}
let genFn = gen();
return (...args) => {
let onceValue = genFn.next().value;
return onceValue ? onceValue(...args) : undefined;
};
};
/**
* let fn = (a,b,c) => (a + b + c)
* let onceFn = once(fn)
*
* onceFn(1,2,3); // 6
* onceFn(2,3,6); // returns undefined without calling fn
*/