相关疑难解决方法(0)

如何使var a = add(2)(3); // 5工作?

我想使这种语法成为可能:

var a = add(2)(3); //5
Run Code Online (Sandbox Code Playgroud)

根据我在http://dmitry.baranovskiy.com/post/31797647上读到的内容

我不知道如何使它成为可能.

javascript currying

38
推荐指数
8
解决办法
5万
查看次数

Javascript函数挑战add(1,2)和add(1)(2)都应返回3

我的一个朋友要求我编写一个适用于这两种情况的函数

add(2,4)  // 6
add(2)(4) // 6
Run Code Online (Sandbox Code Playgroud)

我的本能是写一个返回自己的add()函数,但我不确定我是朝着正确的方向前进.这失败了.

function add(num1, num2){
    if (num1 && num2){
        return num1 + num2;
    } else {
        return this;
    }
}

alert(add(1)(2));
Run Code Online (Sandbox Code Playgroud)

所以我开始阅读返回其他函数或返回自己的函数.

我会继续尝试,但如果有人有一个光滑的解决方案,我很乐意看到它!

javascript closures function challenge-response

4
推荐指数
2
解决办法
7715
查看次数

卷曲一个带有无限参数的函数

使用ES5,你如何理解一个带有无限参数的函数.

function add(a, b, c) {
    return a + b + c;
}
Run Code Online (Sandbox Code Playgroud)

上面的函数只需要三个参数,但我们希望我们的curried版本能够获取无限参数.

因此,以下所有测试用例都应该通过:

var test = add(1);

test(2);     //should return 3
test(2,3);   //should return 6
test(4,5,6); //should return 16
Run Code Online (Sandbox Code Playgroud)

这是我提出的解决方案:

function add(a, b, c) {
    var args = Array.prototype.slice.call(arguments);

    return function () {
        var secondArgs = Array.prototype.slice.call(arguments);
        var totalArguments = secondArgs.concat(args);

        var sum = 0;

        for (i = 0; i < totalArguments.length; i++) {
            sum += totalArguments[0];
        }

        return sum;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,有人告诉我,它的风格并不是很"实用".

javascript functional-programming

4
推荐指数
3
解决办法
3809
查看次数

如何在闭包中乘以数字

如何实现用于乘以任意数量的数字的锁定功能。

调用示例:

multiply(1)(2)(3)(4)(5) // 120
Run Code Online (Sandbox Code Playgroud)

为了完成这个任务,需要重新定义toString内部函数的方法,该方法应该返回累积结果,但我有结果NaN

multiply(1)(2)(3)(4)(5) // 120
Run Code Online (Sandbox Code Playgroud)

javascript closures

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