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?


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

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')

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.