Dua set tanda kurung setelah pemanggilan fungsi

168

Saya mencari cara kerja filter di Angularjs dan saya melihat bahwa kita perlu mengirim 2 set tanda kurung.

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

Apa artinya dan bagaimana cara kita mengatasinya dengan JavaScript?

L105
sumber
7
Secara pribadi saya menemukan sintaks ini membingungkan / canggung untuk dibaca juga. Tetapi Anda dapat menggunakan sintaksis yang lebih sederhana untuk mengakses filter AngularJS seperti dijelaskan di sini: stackoverflow.com/a/14303362/1418796
pkozlowski.opensource
Saya mengambil angular sebagai contoh. Saya ingin tahu bagaimana menangani ini jika saya membuat fungsi sendiri.
L105
4
Sebenarnya ini disebut "currying". teknik pemrograman.
Sajuuk

Jawaban:

331

Ini berarti bahwa fungsi pertama ( $filter) mengembalikan fungsi lain dan kemudian fungsi yang dikembalikan segera dipanggil. Sebagai contoh:

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

var addTwo = add(2);

addTwo(4) === 6; // true
add(3)(4) === 7; // true
Paul
sumber
14
Dengan fungsi panah ES6 Anda dapat menuliskannya dengan cara berikut:let add = (x) => (y) => x + y;
guido
2
Panggil saya Noob, tapi tolong luangkan waktu Anda untuk menjelaskan bagaimana sub-fungsi dapat menyimpan nilaix
Vikas Bansal
2
@VikasBansal Setiap kali sebuah fungsi dipanggil dalam Javascript konteks eksekusi baru dibuat, selama ada referensi ke fungsi lain di dalamnya bahwa konteks eksekusi akan tetap tersimpan dalam memori.
Paul
11
Mengapa tidak melewati 2 argumen saja add(x, y)? Di mana manfaat menyebutnya seperti itu?
Piotr Pawlik
1
Terima kasih atas penjelasan ini! Benar-benar membantu saya memahami bagaimana otentikasi passportjs bekerja:passport.authenticate("local")(req, res, function(){
tidydee
22

$filter('number') mengembalikan fungsi yang menerima dua argumen, yang pertama diperlukan (angka) dan yang kedua opsional (ukuran fraksi).

Mungkin untuk segera memanggil fungsi yang dikembalikan:

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

Atau, Anda dapat menjaga fungsi yang dikembalikan untuk digunakan di masa depan:

var numberFilter = $filter('number');

numberFilter('123')
Mendongkrak
sumber
ini; terlihat rumit: ekspor const toursListQuery = gql` permintaan ToursListQuery {tours {id name}} `; ekspor graphql default (toursListQuery, {options: {pollInterval: 10000},}) (ToursList);
stackdave
7

Sama seperti ini:

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

The $filter()mengembalikan fungsi pointer ke fungsi lain.

Bryan Oakley
sumber