javascript中的多个函数调用即组合(foo)(bar)

时间:2013-04-12 20:17:59

标签: javascript function invocation

我过去见过你可以这样做:

function combine(arg1){
   return function(arg2){
      return (arg1 + arg2);
   };
}
combine("foo")("bar");

结果将是“foobar”。

你当然可以这样做:

(function(x){
    return function(y){
       return x+y;
    };
})(2)(3);

结果为5。

我只是想知道这叫什么。我想我看到了一个我无法找到的小型Crockford视频,我确信它出现在Good Parts上,简要地谈到了这一点。我也有这本书,我在那里看不到它。

这似乎是另一种调用函数和控制变量范围的方法。

4 个答案:

答案 0 :(得分:2)

我相信您正在寻找Currying

这个词

答案 1 :(得分:1)

可以在YouTube上找到Rchristiani,这是Crockford引用两个调用添加的功能的视频。它是FrontEndMasters.com研讨会系列的一部分。

使用Douglas Crockford测试您对功能范围的了解:http://youtu.be/hRJrp17WnOE

Crockford的网站包含一份优秀且令人兴奋的Currying细分的副本。 (我不确定原作者是谁。)它显示了多个调用的例子。

http://www.crockford.com/javascript/www_svendtofte_com/code/curried_javascript/index.html

答案 2 :(得分:0)

如果您指的是内部函数从外部函数访问变量的能力,则称为闭包。

你可以在这里阅读闭包:
How do JavaScript closures work?

答案 3 :(得分:0)

你在寻找的是CurryingPartial(这取决于函数是否需要两个以上的参数)。

您也可以使用ES5规范中的bind来实现此目的。例如:

function sum(a, b) {
    return a + b;
}

var sum5 = sum.bind(null, 5);

console.log(sum5(10)); // 15