如何编写像操作数(operator(operand))这样的JS函数?

时间:2018-08-31 16:14:05

标签: javascript

我似乎无法全神贯注地编写在JavaScript中看起来像eight(times(five))的函数。

示例:

  • eight(times(five))应该返回40
  • three(plus(two))应该返回5

这是Codewars问题。它为0-9的数字提供了空函数,看起来像“ eight(){}”,为运算符提供了空函数,看起来像“ times(){}”。解决方案应该是执行“八(加(三))”将返回11,依此类推。

2 个答案:

答案 0 :(得分:2)

您可以使用返回实际值的值或函数调用的函数。然后,您需要为操作数选择一个函数,以重新调整该函数对该值的闭包。

function eight(fn) {
    return typeof fn === 'function' ? fn(8) : 8;
}

function times(fn) {
    return function (op) {
        return fn() * op;
    };
}

console.log(eight(times(eight)));

答案 1 :(得分:0)

我知道我在写此回复时回答了问题...但是我还是会张贴它。

function times(fn) {
    return function (op) {
        return fn() * op;
    };
}
function plus(fn) {
    return function (op) {
        return fn() + op;
    };
}
function minus(fn) {
    return function (op) {
        return fn() - op;
    };
};
createNumbers = () => {
    var num = 0;
    ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'].forEach((number) => {
        let val = num;
        window[number] = (fn) => {
            return fn ? fn(val) : val;
        };
        num++;
    });
};
createNumbers();
three(times(five)); // 15
eight(plus(two));// 10
etc