我可以写一个无限的咖喱功能吗?

时间:2016-08-16 21:24:19

标签: javascript

从一本关于函数式编程的书中,我了解了JavaScript中的闭包以及它们如何工作。一个简单的例子是:

function StringCon(arg) {
   return function (ar) {
    return arg + ar;

   }
 }
StringCon("hello")(" world")//-> "hello world"

但是,由于我们想要添加更多参数,我们需要返回越来越多可能很快混淆的函数。

我想创建一个允许我传入一个字符串的函数,并能够通过更多的函数调用添加它。当最后传递一个空调用时,它应该返回连接的字符串。 示例可能如下所示。

StringCon("I ")("am ")("new ")("to")(" JavaScript")();//-> I am new to JavaScript

另外,如果不完全可能,那么最接近的解决方案是什么? 提前谢谢!

2 个答案:

答案 0 :(得分:2)

你可以,基本上:

  • 创建一个返回StringCon;
  • 的函数
  • 在此功能的任何属性中记忆arg;
  • 使用存储arg;
  • 的属性获取连接结果

您无法直接访问连接结果,因为即使使用代理,您也必须重新调用返回值。它也可以限制呼叫以在有限的呼叫中返回最终结果。

function StringCon(arg) {
    var f = function(x) {
        return StringCon(arg + x);
    };
    // var f = StringCon.bind(this, arg + x);

    f.value = arg;

    return f;
}

StringCon("I ")("am ")("new ")("to")(" JavaScript")
.value // -> "I am new to JavaScript"

答案 1 :(得分:0)

听起来像你之后的事情:

function concat() {
    return Array.prototype.slice.call(arguments).join(' ');
}

采用许多参数,连接它们并且不返回另一个函数。 (我错过了什么吗?)