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
 */
profile-image
Hi, 我是 Zeki。目前為一名前端工程師。我相信科技始終來自於人性,是用來幫助人們過上更有品質的生活的,但願也希望如此。