gpt4 book ai didi

javascript - Codewars 解决方案 - 相互嵌套的函数

转载 作者:行者123 更新时间:2023-12-04 01:03:35 25 4
gpt4 key购买 nike

关闭。这个问题需要details or clarity .它目前不接受答案。












想改善这个问题吗?通过 editing this post 添加详细信息并澄清问题.

去年关闭。




Improve this question




我正在寻找一个关于 codewars 的谜题的解决方案,但我不明白它为什么有效。减号()是如何工作的?

function makeNum(num, func) {
if (func === undefined) {
return num;
} else {
return func(num);
}
}

function three(func) {
return makeNum(3, func);
}

function eight(func) {
return makeNum(8, func);
}

function minus(right) {
return function(left) {
return left - right;
};
}

console.log(eight(minus(three()))); // will log out 5

最佳答案

这有点复杂。 :-)
console.log(eight(minus(three())));是由内而外的,所以让我们来看看:

  • three() - 调用 makeNum(3, undefined)并返回它返回的内容。 makeNum(3, undefined)返回 3 ,这就是返回值。
  • minus(3) - 调用 minus , 传入 3right . minus返回一个关闭的新函数 right .
  • eight(...) - 调用 makeNum(8, fnFromMinus)哪里fnFromMinusminus(3) 返回的函数. makeNum(8, fnFromMinus)是否fnFromMinus , 传入 8left . fnFromMinus返回 left - right 的结果(记住 right3fnFromMinus 在它上面关闭)。

  • 8 - 35 ,最终结果是 5 , 其中 console.log返回。

    这是一个检测版本:

    let indent = 0;
    function show(label) {
    console.log(" ".repeat(indent * 4) + label);
    }
    function fname(fn) {
    return fn ? fn.name : "undefined";
    }

    function makeNum(num, func) {
    const descr = `makeNum(${num}, ${fname(func)})`;
    show(descr);
    ++indent;
    if (func === undefined) {
    --indent;
    show(`${descr} returns ${num}`);
    return num;
    } else {
    const rv = func(num);
    --indent;
    show(`${descr} returns ${num}`);
    return rv;
    }
    }

    function three(func) {
    const descr = `three(${fname(func)})`;
    console.log(descr);
    ++indent;
    const rv = makeNum(3, func);
    --indent;
    show(descr + ` returns ${rv}`);
    return rv;
    }

    function eight(func) {
    const descr = `eight(${fname(func)})`;
    console.log(descr);
    ++indent;
    const rv = makeNum(8, func);
    --indent;
    show(descr + ` returns ${rv}`);
    return rv;
    }

    function minus(right) {
    const fn = function fnFromMinus(left) {
    show(`${fname(fn)} returns ${left} - ${right} = ${left - right}`);
    return left - right;
    };
    try {
    // For browsers that don't do `name` properly
    fn.name = "fnFromMinus";
    } catch (e) { }
    show(`minus(${right}) returns ${fname(fn)}`);
    return fn;
    }

    console.log(eight(minus(three()))); // will log out 5
    .as-console-wrapper {
    max-height: 100% !important;£
    }

    关于javascript - Codewars 解决方案 - 相互嵌套的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59228324/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com