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.