Два набора скобок после вызова функции

129

Я смотрел, как фильтры работает в Angularjs, и я увидел, что нам нужно отправить 2 набора круглых скобок.

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

Что это значит и как мы обрабатываем его с помощью JavaScript?

  • 7
    Лично я нахожу этот синтаксис запутанным / неудобным для чтения. Но вы можете использовать более простой синтаксис для доступа к фильтрам AngularJS, как описано здесь: stackoverflow.com/a/14303362/1418796
  • 0
    Я взял angularjs в качестве примера. Я хотел знать, как справиться с этим, если я сам создаю функцию.
Показать ещё 1 комментарий
Теги:

3 ответа

279
Лучший ответ

Это означает, что первая функция ($filter) возвращает другую функцию, а затем возвращенная функция вызывается немедленно. Например:

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

var addTwo = add(2);

addTwo(4) === 6; // true
add(3)(4) === 7; // true
  • 9
    С помощью функций стрелок ES6 вы можете написать это следующим образом: let add = (x) => (y) => x + y;
  • 2
    Назовите меня нубом, но, пожалуйста, уделите время тому, чтобы объяснить, как подфункция может удерживать значение x
Показать ещё 7 комментариев
18

$filter('number') возвращает функцию, которая принимает два аргумента, первая требуется (число), а вторая необязательна (размер фракции).

Можно сразу вызвать возвращенную функцию:

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

В качестве альтернативы вы можете сохранить возвращаемую функцию для использования в будущем:

var numberFilter = $filter('number');

numberFilter('123')
  • 0
    в этом случае, где поставить .catch, чтобы получить ошибки?
  • 0
    @stackdave что ты пытаешься решить?
Показать ещё 1 комментарий
5

Это то же самое, что и:

var func = $filter('number');
func(number[, fractionSize]);

Функция $filter() возвращает указатель на другую функцию.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню