Два набори дужок після виклику функції


168

Я дивився, як працюють фільтри в Angularjs, і побачив, що нам потрібно надіслати 2 набори дужок.

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

Що це означає і як ми обробляємо це за допомогою JavaScript?


7
Особисто я вважаю цей синтаксис заплутаним / незручним для читання. Але ви можете використовувати більш простий синтаксис для доступу AngularJS фільтрів , як описано тут: stackoverflow.com/a/14303362/1418796
pkozlowski.opensource

Я взяв angularjs як приклад. Мені хотілося знати, як впоратися з цим, якщо я сам створюю функцію.
L105

4
Насправді це називається "просівання". методика програмування.
Саджук

Відповіді:


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;
guideo

2
Зателефонуйте мені Noob, але, будь ласка, витратьте свій час, щоб пояснити, як підфункція здатна утримувати значенняx
Vikas Bansal

2
@VikasBansal Кожен раз, коли функція викликається в Javascript, створюється новий контекст виконання, доки в ній є посилання на іншу функцію, що контекст виконання залишатиметься в пам'яті.
Павло

11
Чому б просто не передати 2 аргументи, як add(x, y)? Де вигода називати це так?
Piotr Pawlik

1
Дякую за це пояснення! Дійсно допомогло мені зрозуміти, як працює автентифікація passportjs:passport.authenticate("local")(req, res, function(){
tidydee

22

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

Можна негайно викликати функцію, що повертається:

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

Ви також можете зберігати повернуту функцію для подальшого використання:

var numberFilter = $filter('number');

numberFilter('123')

це; виглядає складним: експорт const toursListQuery = gql` запит ToursListQuery {tours {id name}} `; експортувати defaultq graphql (toursListQuery, {параметри: {pollInterval: 10000},}) (ToursList);
stackdave

7

Це те саме, що і це:

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

$filter()Функція повертає покажчик на іншу функцію.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.