函数调用后的两组括号


168

我一直在寻找过滤器在Angularjs中的工作方式,我看到我们需要发送2套括号。

$filter('number')(number[, fractionSize])

它是什么意思,以及我们如何使用JavaScript处理它?


7
我个人也觉得这种语法令人困惑/难以理解。但是您可以使用更简单的语法来访问AngularJS过滤器,如下所述:stackoverflow.com/a/14303362/1418796
pkozlowski.opensource 2013年

我以angularjs为例。我想知道如果我自己创建一个函数该如何处理。
L105 2013年

4
实际上,它被称为“咖喱”。一种编程技术。
Sajuuk

Answers:


331

这意味着第一个函数($filter)返回另一个函数,然后立即调用该返回的函数。例如:

function add(x){
  return function(y){
    return x + y;
  };
}

var addTwo = add(2);

addTwo(4) === 6; // true
add(3)(4) === 7; // true

14
使用ES6箭头功能,您可以按以下方式编写:let add = (x) => (y) => x + y;
guido 2015年

2
叫我一个菜鸟,但请您花点时间解释子功能如何保持价值x
Vikas Bansal

2
@VikasBansal每次在Javascript中调用一个函数时,只要在其中引用了另一个函数,该执行上下文将保留在内存中,就会创建一个新的执行上下文。
保罗

11
为什么不只传递像2这样的参数add(x, y)呢?这样称呼的好处在哪里?
Piotr Pawlik

1
感谢您的解释!确实帮助我了解了passport.authenticate("local")(req, res, function(){
passwordjs

22

$filter('number') 返回一个接受两个参数的函数,第一个是必需的(一个数字),第二个是可选的(分数大小)。

可以立即调用返回的函数:

$filter('number')('123')

或者,您可以保留返回的函数以供将来使用:

var numberFilter = $filter('number');

numberFilter('123')

这个; 看起来很复杂:export const toursListQuery = gql` query ToursListQuery {Tours {id name}}`; 导出默认的graphql(toursListQuery,{选项:{pollInterval:10000},})(ToursList);
stackdave

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.