相关疑难解决方法(0)

Variadic curried sum函数

我需要一个js sum函数来像这样工作:

sum(1)(2) = 3
sum(1)(2)(3) = 6
sum(1)(2)(3)(4) = 10 
etc.
Run Code Online (Sandbox Code Playgroud)

我听说不能这样做.但是听说如果加+在前面sum就可以做到.喜欢+sum(1)(2)(3)(4).
有关如何做到这一点的任何想法?

javascript currying

27
推荐指数
7
解决办法
4万
查看次数

范围调用函数内部的函数

希望有人找到时间来解释函数和范围中的函数.我试图更多地了解变量的函数和范围,并找到了一个相当不错的教程,但这部分我只是没有得到.

任务:

创建一个像这样工作的函数sum:sum(a)(b) = a+b并接受任意数量的括号.例子:

sum(1)(2) == 3
sum(5)(-1)(2) == 6
Run Code Online (Sandbox Code Playgroud)

解决方案:

function sum(a) {

    var sum = a;

    function f(b){
        sum += b;
        return f;
    }

    f.toString = function() { return sum };

    return f;         //line 12
}

alert( sum(1)(2) );   // 3e
Run Code Online (Sandbox Code Playgroud)

说明:

要使sum(1)可调用为sum(1)(2),它必须返回一个函数.该函数可以被调用或转换为数字valueOf.解决方案真的不言自明:

我的解释:

ffunction f(b)返回到范围,该范围是从管线02 - 12 ff.toString,为当前返回ffunction(b) 接下来return f返回到其是功能以外的范围sum(a).

问题:

我无法弄清楚,我需要以不同的方式思考,因为就像我上面所描述的那样,函数不会被再次调用,那么代码的哪一部分可以使"几个括号"成为可能?

而且,我是否正确地假设f …

javascript scope function

24
推荐指数
1
解决办法
1795
查看次数

创建具有不确定数量的连续调用的函数

作为编程挑战的一部分,我们的任务是创建一个具有不确定数量的连续调用的函数.举个例子,假设函数只返回提供的参数的总和,它应该如下工作:

sum(4)() // 4
sum(4)(5)() // 9
sum(4)(5)(9)() // 18
sum(4)(5)(9)(1)() // 19
// etc...
Run Code Online (Sandbox Code Playgroud)

最后允许的空函数调用将问题简化为呼叫结束的指示.

我已经开发了一个解决方案来完成工作,但在函数本身内部使用全局变量:

var sum = function (a) {
    if (!sum.init) {
        sum.total = 0;
        sum.init = true;
    }
    if (!arguments.length) {
        sum.init = false;
        return sum.total;
    }
    sum.total += a;
    return sum;
};
Run Code Online (Sandbox Code Playgroud)

这个解决方案有效,但使用状态,全局变量和函数对象技巧,这是不理想的.我的问题是,是否有办法以纯粹的递归方式解决问题.

作为旁注,如果没有提供最后一次空调(),我不相信问题可以解决,但如果我错了请告诉我.

更新

CodeReview已回答了这个问题:https://codereview.stackexchange.com/a/153999/129579

一种不依赖于全局范围且纯功能的neet解决方案.

javascript functional-programming

8
推荐指数
1
解决办法
259
查看次数

如何使 `foo[1] ==1; foo[1][2]==3; foo[1][2][3]==6` 在 JavaScript 中工作吗?

如何定义foo以使以下代码按预期正确工作(在 JavaScript 中)?

foo[1] + 1             // 2
foo[1][2] + 1          // 4
foo[10][20][30] + 1    // 61
foo[100][200][300] + 1 // 601
Run Code Online (Sandbox Code Playgroud)

这是我曾经遇到过的一个面试题。

javascript es6-proxy

-4
推荐指数
1
解决办法
63
查看次数