İşlev çağrısından sonra iki parantez kümesi


168

Angularjs'de filtrelerin nasıl çalıştığına bakıyordum ve 2 set parantez göndermemiz gerektiğini gördüm.

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

Ne anlama geliyor ve JavaScript ile nasıl başa çıkıyoruz?


7
Şahsen ben bu sözdizimini okumanın kafa karıştırıcı / garip olduğunu düşünüyorum. Ancak AngularJS filtrelerine burada açıklandığı gibi erişmek için daha basit bir sözdizimi kullanabilirsiniz: stackoverflow.com/a/14303362/1418796
pkozlowski.opensource

Angularjs'i bir örnek olarak aldım. Kendim bir işlev yaratırsam bununla nasıl başa çıkacağımı bilmek istedim.
L105

4
Aslında buna "körelme" denir. bir programlama tekniği.
Sajuuk

Yanıtlar:


331

Bu, ilk işlevin ( $filter) başka bir işlevi döndürdüğü ve ardından döndürülen işlevin hemen çağrıldığı anlamına gelir . Örneğin:

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

var addTwo = add(2);

addTwo(4) === 6; // true
add(3)(4) === 7; // true

14
ES6 ok işlevleri ile aşağıdaki şekilde yazabilirsiniz:let add = (x) => (y) => x + y;
guido

2
Bana Noob deyin, ama lütfen alt fonksiyonun değerini nasıl tutabileceğini açıklamak için zaman ayırınx
Vikas Bansal

2
@VikasBansal Bir işlev Javascript'te her çağrıldığında, yürütme içeriğinin bellekte kalacağı başka bir işleve başvuru olduğu sürece yeni bir yürütme içeriği oluşturulur.
Paul

11
Neden sadece 2 argümanı iletmiyoruz add(x, y)? Böyle çağırmanın yararı nerededir?
Piotr Pawlik

1
Bu açıklama için teşekkürler! Gerçekten passportjs kimlik doğrulamasının nasıl çalıştığını anlamama yardımcı oldu:passport.authenticate("local")(req, res, function(){
tidydee

22

$filter('number') birincisi gerekli (bir sayı) ve ikincisi isteğe bağlı (kesir boyutu) olmak üzere iki bağımsız değişkeni kabul eden bir işlev döndürür.

Döndürülen işlevi hemen aramak mümkündür:

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

Alternatif olarak, döndürülen işlevi ileride kullanmak üzere saklayabilirsiniz:

var numberFilter = $filter('number');

numberFilter('123')

bu; karmaşık görünüyor: const tours'u aktarListQuery = gql` query ToursListQuery {tours {id name}} `; varsayılan grafik dışa aktar (toursListQuery, {options: {pollInterval: 10000},}) (ToursList);
stackdave

7

Şununla aynı:

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

$filter()İşlev başka bir işlev için bir işaretçiyi geri döndürmektedir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.