2017-11-08 131 views
5

this source'dan code generated by Babel numaralı telefona rastladım. Bir şekilde gerekli bir işlevi koruyormuş gibi görünüyor.JS'de (0, func)() çağrısının amacı nedir?

(0, _utilities.validateNextState)(nextDomainState, reducerName, action); 

Ben parantez içinde virgülle deyimi 0 atar ve validateNextState fonksiyonunu döndürür, ancak anlamak neden sadece yapamaz:

_utilities.validateNextState(nextDomainState, reducerName, action); 

Benim tahminim bekçi türüdür (kapanışları kapsamını korumak gibi veya setTimeout bir işlev çağrısını eşzamansız yapar), ancak amacının ne olduğunu anlayamaz.

+2

Muhtemelen aramanın içinde '' ''utut''unu ayarlamaktan kaçınmak için. – user2357112

cevap

3

JavaScript'in bazen mistikleştirici semantikleri muhtemelen sebebidir.

ifadesi, elbette bu işlevin bir referansını değerlendirir. Ancak, parantez içine alınmış alt ifadede olduğu için,olmadanno'lu arama işlevi için bağlam olarak tanınan (değeri) işlev çağrısı işlev çağrısı. Böylece, validateNextState işlevinin içinde,undefined ya da "katı" mod durumuna bağlı olarak genel nesneye bir başvuru olacaktır.

Babel'in bunu yaptığından şüpheleniyorum çünkü orijinal kaynak kodunda validateNextState() numaralı çağrı "çıplak" bir işlevmiş gibi yapılmış, bir nesnede bir yöntem değil. Babel, (muhtemelen) this'un değerinin bu özel işlev için önemli olup olmadığını bilmez, ancak güvenli bir şekilde çağırıldığından emin olmalıdır.

+0

Ama neden sadece (_utilities.validateNextState) (args) '? Düzenleme: Görünüşe göre bu, bu etkiye sahip olmayacak ama nedenini bilmiyorum. –

+0

@Derek 朕 會 功夫 JavaScript garip. – Pointy

+0

™ @Pointy: p'yi unuttun –